安裝 TypeScript
執(zhí)行命令行
npm install -g typescript
會(huì)在全局環(huán)境下安裝 tsc 命令,安裝完成之后岂丘,我們就可以在任何地方執(zhí)行 tsc 命令了陵究。
編譯一個(gè) TypeScript 文件很簡單:
tsc hello.ts
我們約定使用 TypeScript 編寫的文件以 .ts 為后綴,用 TypeScript 編寫 React 時(shí)元潘,以 .tsx 為后綴畔乙。
原始數(shù)據(jù)類型
JavaScript 的類型分為兩種:原始數(shù)據(jù)類型(Primitive data types)和對象類型(Object types)。
原始數(shù)據(jù)類型包括:布爾值翩概、數(shù)值牲距、字符串、null
钥庇、undefined
以及 ES6 中的新類型 Symbol
牍鞠。
本節(jié)主要介紹前五種原始數(shù)據(jù)類型在 TypeScript 中的應(yīng)用。
-
布爾值
let isDone: boolean = false;
-
數(shù)值
let decLiteral: number = 6;
-
字符串
let myName: string = 'Tom';
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
-
Null 和 Undefined
let u: undefined = undefined;
let n: null = null;
tips:undefined 和 null 是所有類型的子類型评姨。也就是說 undefined 類型的變量难述,可以賦值給 其他 類型的變量,例如賦值給number類型的變量:
// 這樣不會(huì)報(bào)錯(cuò)
let num: number = undefined;
// 這樣也不會(huì)報(bào)錯(cuò)
let u: undefined;
let num: number = u;
-
空值
JavaScript 沒有空值(Void)的概念吐句,在 TypeScript 中胁后,我們用 void 表示沒有任何返回值的函數(shù):
function alertName(): void {
alert('My name is Tom');
}
任意值
字面意思就是允許賦值為所有類型,包括簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型嗦枢。
對于普通數(shù)據(jù)類型攀芯,在賦值過程中是不可以改變類型的,否則會(huì)報(bào)錯(cuò):
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
但如果是any類型文虏,賦值過程中改變類型是允許的:
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;
因?yàn)槭莂ny類型侣诺,可以是數(shù)組,可以是對象氧秘,所以
- 在任意值上訪問任何屬性都是允許的
let anyThing: any = 'hello';
console.log(anyThing.myName);
console.log(anyThing.myName.firstName);
- 也允許調(diào)用任何方法:
let anyThing: any = 'Tom';
anyThing.setName('Jerry');
anyThing.setName('Jerry').sayHello();
anyThing.myName.setFirstName('Cat');
可以認(rèn)為年鸳,聲明一個(gè)變量為任意值之后,對它的任何操作丸相,返回的內(nèi)容的類型都是任意值搔确。
類型推論
如果沒有明確的指定類型,那么 TypeScript 會(huì)依照類型推論(Type Inference)的規(guī)則推斷出一個(gè)類型
在ts中灭忠,以下代碼雖然沒有指定類型膳算,但是會(huì)在編譯的時(shí)候報(bào)錯(cuò):
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
事實(shí)上,它等價(jià)于:
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
TypeScript 會(huì)在沒有明確的指定類型的時(shí)候推測出一個(gè)類型更舞,這就是類型推論畦幢。
如果定義的時(shí)候沒有賦值,不管之后有沒有賦值缆蝉,都會(huì)被推斷成 any 類型而完全不被類型檢查宇葱,不會(huì)報(bào)錯(cuò)
let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
tips:注意變量被推導(dǎo)成any類型的關(guān)鍵點(diǎn),在于我們定義一個(gè)變量之后刊头,有沒有立即賦值黍瞧。定義之后沒有賦值,以后就會(huì)定義為any類型原杂,如果定義之后印颤,第一次賦值是string,就會(huì)推導(dǎo)為string類型穿肄。