TypeScript是由微軟開源的一種JavaScript超集語言最筒,它不僅包含當(dāng)前Javascript的特性,而且實(shí)現(xiàn)了esnext提案湿颅。TypeScript的宗旨是為JavaScript提供可靠的類型檢查早像,避免出現(xiàn)意大利面條式的代碼,在大型的項(xiàng)目中讓源碼更加可控肖爵。
優(yōu)勢(shì) | 劣勢(shì) | |
---|---|---|
TypeScript | 強(qiáng)類型 IDE支持好 編碼規(guī)范 | 私有標(biāo)準(zhǔn) 使用較少 語法差異小 必須編譯 |
Javascript | 官方標(biāo)準(zhǔn) 應(yīng)用廣泛 | 弱類型 IDE支持差 |
CoffeeScript | 強(qiáng)類型 高級(jí)特性支持 | 特性es6支持 語法差異大 必須編譯 |
在TypeScript出現(xiàn)之前卢鹦,JavaScript也出現(xiàn)了多種方言,但是語法都與JavaScript差異太大劝堪,使用門檻過高冀自,對(duì)JavaScript第三方庫不兼容。TypeScript語法與JavaScript相似秒啦,入門門檻極低熬粗,對(duì)于JavaScript編寫的第三方類庫通過提供.d.ts type文件兼容,目前較為流行的類庫都可以兼容TypeScript余境。
JavaScript是弱類型語言驻呐,而且由于語法過于靈活,在實(shí)際編碼中很容易導(dǎo)致錯(cuò)誤出現(xiàn)芳来,特別是在大型的項(xiàng)目中含末。TypeScript很好的避免了這些問題,對(duì)于數(shù)據(jù)描述提供interface即舌,這也是TypeScript的核心所在佣盒。
JavaScript在聲明函數(shù)時(shí),參數(shù)沒有類型顽聂,而且返回也沒有類型肥惭,使用和維護(hù)都帶來一定的困難。
function add(a, b) {
return a + b;
}
TypeScript則需要聲明函數(shù)的參數(shù)和返回值紊搪,在變量初始化的時(shí)候需要聲明類型蜜葱,也可以通過類型推導(dǎo)自動(dòng)聲明,相較與JavaScript并沒有帶來多大的工作量耀石。
let a = 1;
let b: number = 1;
function add(a: number, b: number): number {
return a + b;
}
Typescript的interface可以很方便的聲明數(shù)據(jù)的結(jié)構(gòu)牵囤,可以通過?聲明哪些數(shù)據(jù)是可選的。
interface User {
name: string;
age?: number;
}
const u: User = {name: 'name', age: 1}; // 正確
const u: User = {name: 'name'}; // 正確
const u: User = {name: 1}; // 錯(cuò)誤提示類型不匹配
const u: User = {}; // 錯(cuò)誤提示name不存在
在app開發(fā)的過程中,情況往往比web開發(fā)更加復(fù)雜奔浅,而且需要不斷的重構(gòu)馆纳,所以使用TypeScript是一個(gè)非常不錯(cuò)的選擇。