一、基本類型
TypeScript 基于靜態類型,這意味著變量的類型必須在編寫代碼時進行定義。TypeScript 提供了許多類型以幫助程序員檢查代碼中的錯誤并增強代碼的可讀性和可維護性。現在我們將介紹 TypeScript 中的一些基本類型。
any 類型
任(ren)何(he)類(lei)型都可(ke)以(yi)分配(pei)給 any 類(lei)型。這意味著編譯器不對變量(liang)執行類(lei)型檢(jian)查,使開發(fa)人(ren)員(yuan)可(ke)以(yi)在代碼(ma)中靈活使用任(ren)何(he)類(lei)型。
typescript
let x: any;
x = 42; // OK
x = "Hello"; // OK
在上面的示例中,我(wo)們定義了一個名(ming)為 `x` 的變量,并將其類型設置為 `any`。然后我(wo)們為 `x` 分配了整數值(zhi) `42` 和字符串值(zhi) `"Hello"`。
number 類型
number 是 TypeScript 中表示數字的內置類型。它支持整(zheng)數、浮點數和(he) NaN(非數字)等值(zhi)。
typescript
let x: number = 42;
let y: number = NaN;
在上面的(de)(de)示例中,我們定義了兩個名為 `x` 和 `y` 的(de)(de)變量,并將(jiang)它們的(de)(de)類型設置為 `number`。然后我們使用整數值(zhi) `42` 初(chu)始化(hua)了 `x` 并使用 NaN 值(zhi)初(chu)始化(hua)了 `y`。
string 類型
string 是 TypeScript 中(zhong)表示(shi)字符串的(de)內(nei)置類型。它(ta)支持引號包含的(de)任何文本值。
typescript
let x: string = "Hello";
let y: string = 'World';
在上面的示例(li)中,我們(men)定義了兩個名為(wei) `x` 和(he) `y` 的變量,并(bing)將它們(men)的類型設(she)置為(wei) `string`。然(ran)后我們(men)分別使用雙引號和(he)單(dan)引號創建(jian)了兩個字(zi)符(fu)串值。
boolean 類型
boolean 是 TypeScript 中表示布爾值(zhi)的內置類型。它支(zhi)持 true 和 false 兩個值(zhi)。
typescript
let x: boolean = true;
let y: boolean = false;
在上(shang)面的示例中,我(wo)們定義了兩個名為(wei) `x` 和(he)(he) `y` 的變量,并將它們的類型設置(zhi)為(wei) `boolean`。然后(hou)我(wo)們分別將它們初(chu)始化(hua)為(wei) true 和(he)(he) false。
null 和 undefined 類型
null 和 undefined 是(shi) TypeScript 中表示空值的內(nei)置類(lei)(lei)型(xing)。它(ta)們(men)是(shi)與(yu)其它(ta)類(lei)(lei)型(xing)不兼(jian)容的單獨類(lei)(lei)型(xing)。
typescript
let x: null = null;
let y: undefined = undefined;
在上面的示(shi)例中,我(wo)們定義了兩個名為 `x` 和 `y` 的變(bian)量,并將它們的類型分別(bie)設置為 `null` 和 `undefined`。
### void 類型
void 是 TypeScript 中表(biao)示沒有返(fan)回值的函(han)數的內置類(lei)型,或者(zhe)表(biao)示變量沒有賦值的類(lei)型。
typescript
function log(message: string): void {
console.log(message);
}
let x: void = undefined;
在上面的示例中(zhong),我們(men)定(ding)義(yi)了一個名為 `log` 的函(han)數,它不返回任(ren)何值,并將(jiang)(jiang)變量 `x` 的類型設置為 `void` 并將(jiang)(jiang)其初始化為 `undefined`。
二、特色(se)類型
在(zai) TypeScript 中,我們可以使用大部分 JavaScript 語法和功能(neng)。TypeScript 還為(wei)我們提供了一(yi)些額外的(de)功能(neng),在(zai)這里介紹一(yi)些常見的(de)語法。
類
TypeScript 提(ti)供了一(yi)種用于定義(yi)(yi)類和對(dui)象(xiang)的(de)語(yu)法。TypeScript 中的(de)類包括(kuo)屬性、方法、構造函數(shu)和聲明。定義(yi)(yi)一(yi)個(ge)類可以使(shi)用 `class` 關鍵字。
typescript
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hi, my name is ${this.name}, and I am ${this.age} years old.`);
}
}
let person = new Person("Alice", 24);
person.greet(); // Hi, my name is Alice, and I am 24 years old.
在上(shang)面的示例中,我(wo)們定義(yi)了一(yi)個(ge) `Person` 類,它(ta)具(ju)有名稱和年齡屬性(xing),以及(ji)一(yi)個(ge) `greet` 方(fang)法(fa)。類的構造函(han)數 `constructor` 接受兩(liang)個(ge)參數,并將(jiang)它(ta)們分別分配(pei)給(gei) `name` 和 `age` 屬性(xing)。我(wo)們還(huan)創建了一(yi)個(ge) `Person` 對象(xiang) `person` 并調用它(ta)的 `greet` 方(fang)法(fa)來輸出一(yi)條消息。
接口
接(jie)口(kou)(kou)是 TypeScript 中的一(yi)種類型定義,用于描(miao)述(shu)對象的形狀和約束。接(jie)口(kou)(kou)可(ke)以定義屬性、方法、可(ke)選屬性、只讀(du)屬性等。
typescript
interface IPerson {
name: string;
age: number;
greet(): void;
}
class Person implements IPerson {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hi, my name is ${this.name}, and I am ${this.age} years old.`);
}
}
let person: IPerson = new Person("Alice", 24);
person.greet(); // Hi, my name is Alice, and I am 24 years old.
在(zai)上(shang)面的(de)示例中,我們(men)定義了一個(ge)(ge) `IPerson` 接(jie)(jie)口,它包含 `name`、`age` 和 `greet` 屬性。然后我們(men)定義了一個(ge)(ge) `Person` 類,并(bing)讓它實現這個(ge)(ge)接(jie)(jie)口。最(zui)后我們(men)使用這個(ge)(ge)接(jie)(jie)口類型來聲明一個(ge)(ge) `Person` 對象(xiang) `person`。
枚(mei)舉
枚(mei)舉(ju)是一種用(yong)于定(ding)義(yi)命(ming)名(ming)常(chang)量的語(yu)法(fa)。在 TypeScript 中,可以使用(yong) `enum` 關鍵字來定(ding)義(yi)一個枚(mei)舉(ju)類(lei)型。
typescript
enum Direction {
Up,
Down,
Left,
Right
}
let direction: Direction = Direction.Up;
console.log(direction); // 0
在(zai)上面的示例中(zhong),我們(men)定義了一個名(ming)為 `Direction` 的枚(mei)舉類型,并添加了 `Up`、`Down`、`Left` 和 `Right` 四個成員。然(ran)后(hou)我們(men)創建了一個名(ming)為 `direction` 的變量,并將它的值(zhi)設置為 `Direction.Up`,這個值(zhi)是(shi)(shi)整(zheng)數 `0`。因為枚(mei)舉默認是(shi)(shi)從 `0` 開始計數并增加,所以(yi) `Up` 的值(zhi)是(shi)(shi) `0`。
泛型
泛型是一種用于創建可重(zhong)用代碼的語法(fa)。在 TypeScript 中,可以使用 `<T>` 語法(fa)來(lai)定義(yi)一個泛型類型。
typescript
function identity<T>(arg: T): T {
return arg;
}
let output1 = identity<string>("Hello");
let output2 = identity<number>(42);
在上面的(de)示例中,我們(men)定義(yi)了一(yi)個(ge)(ge)(ge)名為 `identity` 的(de)函數,并(bing)使用 `<T>` 語法定義(yi)了一(yi)個(ge)(ge)(ge)泛型(xing)(xing)類(lei)型(xing)(xing)。函數接受(shou)一(yi)個(ge)(ge)(ge)類(lei)型(xing)(xing)為 `T` 的(de)參數,并(bing)返回一(yi)個(ge)(ge)(ge)類(lei)型(xing)(xing)為 `T` 的(de)值。然后(hou)我們(men)創建了兩個(ge)(ge)(ge)變量 `output1` 和(he) `output2` 分(fen)別(bie)傳(chuan)入一(yi)個(ge)(ge)(ge)字(zi)符串和(he)一(yi)個(ge)(ge)(ge)數字(zi)類(lei)型(xing)(xing)的(de)值,并(bing)使用相應的(de)泛型(xing)(xing)類(lei)型(xing)(xing)來明確類(lei)型(xing)(xing)。
類型別名(ming)
類(lei)(lei)型別(bie)名是一種用于為類(lei)(lei)型聲明更有意義(yi)的名稱的語法(fa)。在 TypeScript 中,可以(yi)使(shi)用 `type` 關鍵(jian)字來(lai)定義(yi)一個類(lei)(lei)型別(bie)名。
typescript
type Point = {
x: number;
y: number;
};
在上面(mian)的示例中(zhong)(zhong),我(wo)們(men)定義了一個(ge)名為 `Point` 的類型(xing)別名,并將它定義為一個(ge)具有兩個(ge)屬性(xing) `x` 和 `y` 的對象類型(xing)。通過定義類型(xing)別名,我(wo)們(men)可以(yi)在代(dai)碼中(zhong)(zhong)更容易和清晰地使用(yong)這(zhe)個(ge)類型(xing)。
結論
在(zai)本(ben)文中,我們學習(xi)了 TypeScript 的基本(ben)語法和(he)類型系統。了解這些內容將幫(bang)助我們編寫更好的代(dai)碼(ma)、增強代(dai)碼(ma)的可讀性(xing)和(he)可維(wei)護(hu)性(xing),以(yi)及避免錯誤并提(ti)高代(dai)碼(ma)的穩定性(xing)。