官網(wǎng)文檔鏈接
typescript是javascript的超集,所以js能干的是ts都能干。ts簡(jiǎn)單理解無(wú)非就是加了類(lèi)型的js,通過(guò)tsc可以將編寫(xiě)的ts代碼轉(zhuǎn)化成js代碼,所以web app可以用ts寫(xiě),node app也可以用ts寫(xiě),只是最后要有一步代碼的轉(zhuǎn)化。
Type(類(lèi)型)
- “js是沒(méi)有類(lèi)型的”,也就是說(shuō)一個(gè)變量在賦值之后是可以賦其他類(lèi)型的值的。
var name = 'Mike';//ok
name = 5;//ok
如果只是簡(jiǎn)單的測(cè)試,這上面的代碼是沒(méi)問(wèn)題的。但在一個(gè)大型的應(yīng)用中,一個(gè)變量應(yīng)該有它對(duì)應(yīng)的實(shí)際意義,顯然name是個(gè)名字,那么我們?cè)谥笫褂眠@個(gè)變量的地方,都期望是個(gè)字符串而不應(yīng)該給它賦值5。
在ts中,很重要的一點(diǎn)就是類(lèi)型聲明。在確定了一個(gè)變量的類(lèi)型之后,之后的使用過(guò)程中就不能修改它的類(lèi)型。
var name:string = 'Mike';//ok
name = 5;//error
在之后的那么的name的使用過(guò)程中,都要按照string類(lèi)型來(lái)處理,否則tsc就會(huì)提示你有類(lèi)型錯(cuò)誤。
- ts中使用的類(lèi)型跟js中是一樣的,有原生類(lèi)型(boolean,number,string),數(shù)組,對(duì)象,自定義對(duì)象。
var name:string = 'Mike';
var age:number = 18;
var isLive:boolean = true;
//names數(shù)組。類(lèi)型定義就是元素的類(lèi)型后面加上個(gè)方括號(hào)
var names:string[] = ['Mike','James','Nick'];
//sayHello的類(lèi)型是一個(gè)方法,參數(shù)是一個(gè)字符串,返回值也是一個(gè)字符串
var sayHello:(name:string) => string;
sayHello = function(name:string){
return 'Hello,'+name;
}
- 接口(interface)是ts中獨(dú)有的用來(lái)描述‘事物外形’(shape)的技術(shù)。
interface Person{
name:string;
age:number;
}
var person = {
name:'Mike',
age:18;
}
接口其實(shí)是不存在的,在最后導(dǎo)出的js文件中什么也看不到,它是為了類(lèi)型檢查而來(lái)的
- 數(shù)組中所有的元素的類(lèi)型都是相同的,所以在push等操作的時(shí)候會(huì)對(duì)目標(biāo)元素的類(lèi)型進(jìn)行判斷,如果不一樣就會(huì)報(bào)錯(cuò)。這樣的好處就是如果我們要對(duì)數(shù)組的元素進(jìn)行操作,那么我們?cè)陂_(kāi)始之前就明確知道這些元素是什么類(lèi)型的,它們到底長(zhǎng)啥樣,有啥屬性和方法。
- 有類(lèi)型就有類(lèi)型轉(zhuǎn)化。ts中類(lèi)型轉(zhuǎn)化要用明確的方式去說(shuō)明,語(yǔ)法就是:<type>,type是目標(biāo)類(lèi)型。
interface Person{
name:string;
}
interface Man{
name:string;
age:number;
}
//ok.因?yàn)楹竺娴膶?duì)象符合Person接口所描述的對(duì)象外形
var person:Person = {
name:'Mike',
age:18
}
var man:Man = {
name:'Mike',
age:18
}
var aMan:Man = person;//error
var bMan:Man = <Man>person;//ok
var name:string = 'Mike';
var age:number = <number>name;//error
//雖然編譯的時(shí)候可以通過(guò),但只是說(shuō)可以通過(guò)編譯,這么用是十分危險(xiǎn)的,指代不明。
var age:number = <number><any>name;//ok
//上面用到了ts中的一個(gè)萬(wàn)能類(lèi)型any,任意的。