官網(wǎng)文檔鏈接
typescript是javascript的超集涤伐,所以js能干的是ts都能干。ts簡單理解無非就是加了類型的js揩徊,通過tsc可以將編寫的ts代碼轉(zhuǎn)化成js代碼似芝,所以web app可以用ts寫,node app也可以用ts寫赐稽,只是最后要有一步代碼的轉(zhuǎn)化叫榕。
Type(類型)
- “js是沒有類型的”浑侥,也就是說一個變量在賦值之后是可以賦其他類型的值的。
var name = 'Mike';//ok
name = 5;//ok
如果只是簡單的測試晰绎,這上面的代碼是沒問題的寓落。但在一個大型的應(yīng)用中,一個變量應(yīng)該有它對應(yīng)的實際意義荞下,顯然name是個名字伶选,那么我們在之后使用這個變量的地方,都期望是個字符串而不應(yīng)該給它賦值5锄弱。
在ts中考蕾,很重要的一點就是類型聲明。在確定了一個變量的類型之后会宪,之后的使用過程中就不能修改它的類型肖卧。
var name:string = 'Mike';//ok
name = 5;//error
在之后的那么的name的使用過程中,都要按照string類型來處理掸鹅,否則tsc就會提示你有類型錯誤塞帐。
- ts中使用的類型跟js中是一樣的,有原生類型(boolean巍沙,number葵姥,string),數(shù)組句携,對象榔幸,自定義對象。
var name:string = 'Mike';
var age:number = 18;
var isLive:boolean = true;
//names數(shù)組矮嫉。類型定義就是元素的類型后面加上個方括號
var names:string[] = ['Mike','James','Nick'];
//sayHello的類型是一個方法削咆,參數(shù)是一個字符串,返回值也是一個字符串
var sayHello:(name:string) => string;
sayHello = function(name:string){
return 'Hello,'+name;
}
- 接口(interface)是ts中獨有的用來描述‘事物外形’(shape)的技術(shù)蠢笋。
interface Person{
name:string;
age:number;
}
var person = {
name:'Mike',
age:18;
}
接口其實是不存在的拨齐,在最后導(dǎo)出的js文件中什么也看不到,它是為了類型檢查而來的
- 數(shù)組中所有的元素的類型都是相同的昨寞,所以在push等操作的時候會對目標(biāo)元素的類型進行判斷瞻惋,如果不一樣就會報錯惹想。這樣的好處就是如果我們要對數(shù)組的元素進行操作蔑鹦,那么我們在開始之前就明確知道這些元素是什么類型的,它們到底長啥樣芥炭,有啥屬性和方法享怀。
- 有類型就有類型轉(zhuǎn)化羽峰。ts中類型轉(zhuǎn)化要用明確的方式去說明,語法就是:<type>凹蜈,type是目標(biāo)類型限寞。
interface Person{
name:string;
}
interface Man{
name:string;
age:number;
}
//ok.因為后面的對象符合Person接口所描述的對象外形
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
//雖然編譯的時候可以通過,但只是說可以通過編譯仰坦,這么用是十分危險的履植,指代不明。
var age:number = <number><any>name;//ok
//上面用到了ts中的一個萬能類型any悄晃,任意的玫霎。