TypeScript

TypeScript是什么

  • TypeScript 是一種由微軟開發(fā)的自由開源的編程語言,他是JavaScript的一個(gè)超集,擴(kuò)展了JavaScript的語法,主要提供了類型系統(tǒng)和對 ES6 的支持。
  • TypeScript 設(shè)計(jì)目標(biāo)是開發(fā)大型應(yīng)用,它可以編譯成純 JavaScript,編譯出來的 JavaScript 可以運(yùn)行在任何瀏覽器上。

JavaScript 與 TypeScript 的區(qū)別

  • TypeScript 是 JavaScript 的超集,擴(kuò)展了 JavaScript 的語法,因此現(xiàn)有的 JavaScript 代碼可與TypeScript 一起工作無需任何修改,TypeScript 通過類型注解提供編譯時(shí)的靜態(tài)類型檢查。
  • TypeScript 可處理已有的 JavaScript 代碼,并只對其中的 TypeScript 代碼進(jìn)行編譯。

TypeScript 的優(yōu)勢

  • 強(qiáng)大的IDE支持:體現(xiàn)在三個(gè)特性上,1.類型檢查,在TS中允許你為變量指定類型。2.語法提示。3.重構(gòu)。
  • Angular2、vue3的開發(fā)語言

TypeScript 的缺點(diǎn)

  • 有一定的學(xué)習(xí)成本,需要理解接口(Interfaces)、泛型(Generics)、類(Classes)、枚舉類型(Enums)等前端開發(fā)可能不是很熟悉的知識點(diǎn)

TypeScript安裝

TypeScript 的命令行工具安裝方法如下:

$ npm install -g typescript

以上命令會在全局環(huán)境下安裝 tsc 命令,安裝完成之后,我們就可以在任何地方執(zhí)行 tsc 命令了。

查看版本

$ tsc -v

編譯一個(gè) TypeScript 文件

編譯一個(gè) TypeScript 文件很簡單,

tsc hello.ts

使用 TypeScript 編寫的文件以 .ts 為后綴

TypeScript 用法

使用 : 指定變量的類型,: 的前后有沒有空格都可以

let num:number = 15;
num(變量名):number(類型) = 15(具體值)
表示定義一個(gè)變量num,指定類型為number;
let str:string = 'abc';
表示定義一個(gè)變量str,指定類型為string;

為什么要用到TS

定義一個(gè)函數(shù)計(jì)算二個(gè)數(shù)據(jù)的合計(jì)
function sum(x,y){
if(typeof x != 'number') { //對于形參的類型要添加轉(zhuǎn)換
x = parseInt(x);
}
return x+y
};
sum('1',2);
TS的方式,直接約束了類型
function sum2(x:number,y:number){
return x+y
};

各類型定義

1、類型定義

let flag:boolean = false; //布爾類型
let num:number = 15; //數(shù)值類型
let str:string = 'abc'; //字符串類型
let str2:string=`hello,${str}`;
let msg:string = `hello,${str},${num}`;
let u: undefined = undefined;
let n: null = null;
任意值

如果是一個(gè)普通類型,在賦值過程中改變類型是不被允許的,任意值(Any)用來表示允許賦值為任意
類型。

let a1: string = 'seven';
a1 = 7;//error
但如果是 any 類型,則允許被賦值為任意類型。
let a2: any = 'seven';
a2 = 7;
變量如果在聲明的時(shí)候,未指定其類型,那么它會被識別為任意值類型
let a3;
a3 = 'seven';
a3 = 7;
相當(dāng)于
let a3:any;
a3 = 'seven';
a3 = 7;

聯(lián)合類型

表示取值可以為多種類型中的一種

let a4: string | number;
a4 = 'seven';
a4 = 7;
a4 = true; 不行

2、數(shù)組類型的定義

在 TypeScript 中,數(shù)組類型有多種定義方式,比較靈活。
最簡單的方法是使用「類型 + 方括號」來表示數(shù)組:

let arr: number[] = [1, 2, 3, 4, 5];
數(shù)組的項(xiàng)中不允許出現(xiàn)其他的類型
let arr: number[] = [1, '2', 3, 4, 'a']; //不行

泛型(Generics)是指在定義函數(shù)、接口或類的時(shí)候,不預(yù)先指定具體的類型,而在使用的時(shí)候再指定類型的一種特性。
泛型變量<T> ,<T>表示任何類型

泛型 和 任意參數(shù)的區(qū)別可參考
TypeScript里的類型為any和泛型的區(qū)別 - 簡書 (jianshu.com)

let arr:Array<number> =[1,2,3];
定義多個(gè)類型
let arr:Array<number|string> =['1',2,3];

3、對象的類型—接口

在面向?qū)ο笳Z言中,接口(Interfaces)是一個(gè)很重要的概念,它是對行為的抽象
接口(Interfaces)可以用于對「對象的形狀(Shape)」進(jìn)行描述。

接口的定義
接口首字母大寫
interface IPerson {
name: string;
age: number;
}

let tom: Person = {
name: 'Tom',
age: 18
};

定義的變量比接口少了一些屬性是不允許的
接口能否更靈活?

可選屬性:
interface Person2 {
name: string;
age?: number;
}

let tom: Person = {
name: 'Tom',
age: 18 //可用可不用
};
任意屬性 :一個(gè)接口允許有任意的屬性
interface Person3 {
name: string;
age?: number;
[propName: string]: any;
};

需要注意的是,一旦定義了任意屬性,那么確定屬性和可選屬性都必須是它的子屬性

4、函數(shù)的類型定義

一個(gè)函數(shù)有輸入和輸出,要在 TypeScript 中對其進(jìn)行約束,需要把輸入和輸出都考慮到

(x:輸入?yún)?shù)類型,y:輸入?yún)?shù)類型) : number(輸出參數(shù)類型)
// 有返回值 return 時(shí)
function sum1(x: number, y: number): number {
return x + y;
}

// 無返回值
function sum2(x: number, y: any): void {
  let a = 0;
  if (x > y) {
    a = 100;
  } else {
    a = 10;
  }
}
參數(shù)默認(rèn)值
function sum3(x: number=5, y: number): number {
return x + y;
}
let s1 = sum3(1, 2);
可選參數(shù)
function sum4(x: number, y?: number): number[] {
return [x,y]
}
let s2 = sum4(1);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容