官網(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等操作的時候會對目標元素的類型進行判斷,如果不一樣就會報錯。這樣的好處就是如果我們要對數(shù)組的元素進行操作,那么我們在開始之前就明確知道這些元素是什么類型的,它們到底長啥樣,有啥屬性和方法。
- 有類型就有類型轉(zhuǎn)化。ts中類型轉(zhuǎn)化要用明確的方式去說明,語法就是:<type>,type是目標類型。
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,任意的。