總結
在透過 create-react-app 建立的 typescript react 專案中,使用 @emotion/react 時遇到兩個問題:
- 試圖在元件上套用 props
css設定樣式時,ts 報錯:Property ‘css’ does not exist…(下略) - 透過
localhost:3000測試專案時,元件的 class 出現的樣式是[object, object]而非編譯好的 class name
此篇筆記記錄一下如何解決這些狀況

版本與環境
@emotion/babel-preset-css-prop: 11.10.0@emotion/react: 11.10.4create-react-app: 5.0.1react: 18.2.0typescript: 4.8.2解決方法
TS 錯誤訊息
在專案的 tsconfig.json 加上以下設定,有使用到 props css 的元件檔案不再需要手動將 /** @jsxImportSource @emotion/react */ 放到檔案最上方:
{ "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "@emotion/react" }}元件樣式名稱錯誤
- 先對專案執行
npm run eject注入create-react-app封裝起來的設定 - 執行
npm i @emotion/babel-preset-css-prop安裝此套件 - 打開 config/webpack.config.js 檔案,移動到 Babel 加工
/\.(js|mjs|jsx|ts|tsx)$/類型檔案的段落,將@emotion/babel-preset-css-prop加到presets中
// 以 create-react-app 5 來說,以下這段內容落在 410 到 425 之間// 此段的註解說明是 'Process application JS with Babel.'
{ test: /\.(js|mjs|jsx|ts|tsx)$/, include: paths.appSrc, options: { presets: [ require.resolve('@emotion/babel-preset-css-prop'), // 加上這行 [ require.resolve('babel-preset-react-app'), { runtime: hasJsxRuntime ? 'automatic' : 'classic', }, ], ], },},- 完成,重啟專案就能看到樣式有被正確地套用了