在 Create React App 中使用 TypeScript,你學(xué)會(huì)了嗎?
在React項(xiàng)目中引入TypeScript(TS)涉及到一系列配置步驟。以下是一個(gè)完整的配置過(guò)程,從創(chuàng)建React項(xiàng)目到配置TypeScript:
1. 需要?jiǎng)?chuàng)建一個(gè)使用 TypeScript 的新項(xiàng)目
首先,你可以使用create-react-app工具來(lái)創(chuàng)建一個(gè)React結(jié)合TypeScript的項(xiàng)目。Create React App 內(nèi)置了對(duì) TypeScript 的支持。在命令行中運(yùn)行以下命令:
npx create-react-app my-app --template typescript
這將創(chuàng)建一個(gè)名為my-react-app的React項(xiàng)目,并安裝默認(rèn)的配置。
2. 進(jìn)入項(xiàng)目目錄:
cd my-react-app
3. 已有的項(xiàng)目添加TyoeScript:
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
4. 重命名文件并修改后綴:
將項(xiàng)目目錄下的src/App.js文件重命名為src/App.tsx,這樣React就能識(shí)別它是一個(gè)TypeScript文件。
5. 修改 src/index.tsx 文件:
將src/index.js文件中的內(nèi)容改為:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
6. 配置 tsconfig.json 文件:
沒(méi)有配置項(xiàng),編譯器提供不了任何幫助。在 TypeScript 里,這些配置項(xiàng)都在一個(gè)名為 tsconfig.json 的特殊文件中定義。可以通過(guò)執(zhí)行以下命令生成該文件:使用 Yarn,執(zhí)行:
yarn run tsc --init
使用 npm,執(zhí)行:
npx tsc --init
在 tsconfig.json 文件里面添加以下基本配置:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules"]
}
這個(gè) tsconfig.json 文件包含了基本的TypeScript配置。你可以根據(jù)項(xiàng)目的需求進(jìn)行調(diào)整。更多配置請(qǐng)參考文檔
7. 修改 src/App.tsx 文件:
在 src/App.tsx 文件中,可以使用 TypeScript 的語(yǔ)法,例如聲明組件的 props 類型和狀態(tài)類型:
import React, { useState } from 'react';
interface AppProps {
message: string;
}
const App: React.FC<AppProps> = ({ message }) => {
const [count, setCount] = useState<number>(0);
return (
<div>
<h1>{message}</h1>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
export default App;
這里使用了 TypeScript 的 interface 來(lái)定義 App 組件的 props 類型,以及使用 useState 聲明了 count 的狀態(tài)類型。
8.文件擴(kuò)展名在 React 中,組件文件大多數(shù)使用 .js 作為擴(kuò)展名。在 TypeScript 中,提供兩種文件擴(kuò)展名:
.ts 是默認(rèn)的文件擴(kuò)展名,而 .tsx 是一個(gè)用于包含 JSX 代碼的特殊擴(kuò)展名。
9.類型定義如果你想要顯示來(lái)自其他包(libraries)的錯(cuò)誤和提示,通常你需要安裝相應(yīng)庫(kù)的 TypeScript 類型聲明。TypeScript 類型聲明文件的后綴為 .d.ts,它包含了有關(guān)庫(kù)的類型信息,使得 TypeScript 編譯器能夠理解和驗(yàn)證你對(duì)庫(kù)的使用。
以下是一些常見(jiàn)情況下可能需要安裝的 TypeScript 類型聲明的例子:
React 類型聲明:
npm install --save @types/react @types/react-dom
如果你使用了 React,這個(gè)命令將安裝 React 和 ReactDOM 的類型聲明文件。
其他 npm 包的類型聲明:
對(duì)于其他可能使用的庫(kù),你可以查看它們的 npm 包是否有相應(yīng)的 @types 包。例如,如果你使用了 axios,可以運(yùn)行:
npm install --save @types/axios
聲明文件不可用的情況:
有時(shí),某些包可能沒(méi)有官方的 TypeScript 類型聲明文件,或者它們可能不是最新的。在這種情況下,你可能需要使用類型聲明文件生成工具,例如 tsc(TypeScript 編譯器)的 --allowJs 和 --declaration 選項(xiàng),以從 JavaScript 代碼生成類型聲明文件。但請(qǐng)注意,這可能不如官方的類型聲明文件準(zhǔn)確和全面。
確保你的項(xiàng)目中包含了所需的類型聲明文件后,TypeScript 編譯器就能夠正確地檢查和驗(yàn)證你對(duì)這些庫(kù)的使用,以及在開(kāi)發(fā)過(guò)程中顯示相關(guān)的錯(cuò)誤和提示信息。