ReactJS中使用TypeScript的方法
TypeScript
TypeScript 實際上就是具有強類型的 JavaScript,可以對類型進行強校驗,好處是代碼閱讀起來比較清晰,代碼類型出現(xiàn)問題時,在編譯時就可以發(fā)現(xiàn),而不會在運行時由于類型的錯誤而導(dǎo)致報錯。但是,從某種程度說TypeScript 失去了 JavaScript 動態(tài)語言的靈活性,代碼寫起來也會比較繁瑣,需要生命類型。
主要語法
首先,TypeScript 支持 JavaScript基本寫法,主要特性是加了類型,主要看下相對于 JavaScript 比較特殊的幾種寫法。
參數(shù)加類型
主流的強類型語言在函數(shù)中都是要定義參數(shù)類型的,如下,useName 的類型是字符串。
function greet(userName: string): string {
return `Hello, ${user.name}! You are ${user.age} years old.`;
}Type 和 Interface
Type主要用于定義類型。Interface 主要用于定義接口,Interface 可以被擴展、可以被類繼承。語法上 Type 和 Interface 可以互換,都可以僅當類型試用。但是,項目開發(fā)中,盡量不要混用,定義類型時就用 Type,定義接口時就用 Interface。
Type 試用方法
type Animal = {
name: string;
species: string;
};
type Loggable = {
log(): void;
};
type LoggableAnimal = Animal & Loggable; //合并
const dog: LoggableAnimal = {
name: "Buddy",
species: "Canine",
log() {
console.log(`${this.name} is a ${this.species}`);
}
};Interface 試用方法
interface Person {
name: string;
age: number;
introduce(): string;
}
class Student implements Person {
name: string;
age: number;
course: string;
constructor(name: string, age: number, course: string) {
this.name = name;
this.age = age;
this.course = course;
}
introduce(): string {
return `Hi, I'm ${this.name}, and I'm ${this.age} years old. I study ${this.course}.`;
}
}泛型
泛型是 TypeScript 非常重要的概念,在 React 中使用非常多。什么是泛型,簡單理解就是類型參數(shù)化,例如在 Animal 類中,有一個animal 屬性,這個屬性可以是 Cat或者Dog,不用泛型的話,可能要定義多個類,當然也可以使用接口或者父類進行抽象。有了泛型,只要通過泛型傳遞就可以了。
class Animal<T> {
name: string; // Regular property for the animal's name
animation: T; // Generic property for the animal's animation
constructor(name: string, animation: T) {
this.name = name;
this.animation = animation;
}
animate(): void {
console.log(`The ${this.name} starts to: ${this.animation}`);
}
}TypeScript 中方法和類型也可以試用泛型。
#方法泛型
function createPair<S, T>(v1: S, v2: T): [S, T] {
return [v1, v2];
}
console.log(createPair<string, number>('hello', 42)); // ['hello', 42]
#類型泛型
type Wrapped<T> = { value: T };
const wrappedValue: Wrapped<number> = { value: 10 };TypeScript 上手很快難度不大,做個基本了解,就可以開始使用了,就是寫起來麻煩一些。
React 中使用 TypeScript
在 React 中使用 TypeScript 最重要的就是類型,例如,props 都有什么字段,字段都是什么類型。只要是在Typescript 中出現(xiàn)的對象,就必要有對應(yīng)的類型,TypeScript 中如果不指定類型,如果是簡單類型可以自動解析,如果是函數(shù)參數(shù)默認為 Any。
代碼中{ title: string } 是行內(nèi)類型
function MyButton({ title }: { title: string }) {
return (
<button>{title}</button>
);
}
export default function MyApp() {
return (
<div>
<h1>Welcome to my app</h1>
<MyButton title="I'm a button" />
</div>
);
}MyButtonProps 是單獨定義的類型
interface MyButtonProps {
/** The text to display inside the button */
title: string;
/** Whether the button can be interacted with */
disabled: boolean;
}
function MyButton({ title, disabled }: MyButtonProps) {
return (
<button disabled={disabled}>{title}</button>
);
}Hooks
React hooks 使用 TypeScript 主要用到的就是泛型,例如,useState
#自動解析為 bool
const [enabled, setEnabled] = useState(false);
#指定類型為Status
type Status = "idle" | "loading" | "success" | "error";
const [status, setStatus] = useState<Status>("idle");Dom Event
DomEvent 是轉(zhuǎn)換到 TypeScript 之后比較難上手的,需要熟悉一下 React 的類型定義。這個有個辦法就是通過 inline 方法,然后VsCode 會給你提示。
export default function Form() {
const [value, setValue] = useState("Change me");
function handleChange(event: React.ChangeEvent<HTMLInputElement>) {
setValue(event.currentTarget.value);
}
return (
<>
<input value={value} onChange={handleChange} />
<p>Value: {value}</p>
</>
);
}直接復(fù)制事件類型就可以。

個人覺得 TypeScript 雖然現(xiàn)在都在推廣,但是確實失去了JavaScript 的靈活性和動態(tài)性,開銷效率降低不少,如果做的是類庫,還要有類型定義文件,看個人喜好和項目需求吧。
到此這篇關(guān)于ReactJS中使用TypeScript的文章就介紹到這了,更多相關(guān)ReactJS使用TypeScript內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react實現(xiàn)動態(tài)增減表單項的示例代碼
在做項目的時候,甲方給的信息有限,網(wǎng)頁的備案信息寫成固定的,之后驗收的時候,甲方要求把這個備案信息寫成動態(tài)的,可以自增減,下面通過實例代碼給大家介紹react實現(xiàn)動態(tài)增減表單項的示例,感興趣的朋友跟隨小編一起看看吧2024-05-05
ReactDOM.render在react源碼中執(zhí)行原理
這篇文章主要為大家介紹了ReactDOM.render在react源碼中執(zhí)行原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
React Hook useState useEffect componentD
這篇文章主要介紹了React Hook useState useEffect componentDidMount componentDidUpdate componentWillUnmount問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
React實現(xiàn)父組件調(diào)用子組件的兩種寫法
react通信分很多種,比如:父子通信,兄弟通信等等,這里我們就簡單說一下父子通信,父子通信分為:父組件調(diào)用子組件里面的方法;子組件調(diào)用子組件里面的方法,這里我們著重說一下父組件調(diào)用子組件,需要的朋友可以參考下2024-04-04
深入理解React Native核心原理(React Native的橋接(Bridge)
這篇文章主要介紹了深入理解React Native核心原理(React Native的橋接(Bridge),本文重點給大家介紹React Native的基礎(chǔ)知識及實現(xiàn)原理,需要的朋友可以參考下2021-04-04
jenkins分環(huán)境部署vue/react項目的方法步驟
這篇文章主要介紹了jenkins分環(huán)境部署vue/react項目的方法,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02

