布爾值
let isBoolean: boolean = true;
數(shù)字
let num: number = 1;
字符串
let str: string = 'abc';
數(shù)組
let arr: number[] = [1,2,3];
let arr2: Array<number> = [1,2,4];
元組:表示一個已知元素數(shù)量和類型的數(shù)組,各元素的類型可以不相同
let x: [string, number];
x = ['hello', 10];//OK
x = [10, 'hello'];//error
console.log(x[0].substr(1));//"hello"
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
let與var的區(qū)別:
var多次聲明同一個變量不會報錯
let聲明一個變量,使用的是詞法作用域或者塊作用域,不同于var聲明的變量那樣可以在函數(shù)外部訪問,塊級作用域在包含他們的塊或者for循環(huán)外是不能被訪問的
let聲明的變量,不能在被聲明前讀寫
塊級作用域變量需要在明顯不同的塊里聲明
當(dāng)let聲明出現(xiàn)在循環(huán)體里時擁有完全不同的行為,不僅在循環(huán)體里引入了一個新的變量環(huán)境,并且針對每次迭代都會創(chuàng)建這樣一個新作用域。這就是我們在使用立即執(zhí)行的函數(shù)表達(dá)式時做的事,所以在 setTimeout例子里我們僅使用let聲明就可以了
for (let i = 0; i < 10 ; i++) {
setTimeout(function() {console.log(i); }, 100 * i);
}
//0,1,2,3,4,5,6,7,8,9
const聲明
const擁有和let相同的作用域規(guī)則,但是它聲明的變量值不能再被修改
類型斷言
索引簽名
this和箭頭函數(shù)
箭頭函數(shù)能保存函數(shù)創(chuàng)建時的this值,而不是調(diào)用時的值
模塊
兩個模塊之間的關(guān)系,是通過在文件級別上使用exports和imports建立的
模塊使用模塊加載器去導(dǎo)入其他的模塊。在運(yùn)行時,模塊加載器的作用是在執(zhí)行此模塊代碼前去檢查并執(zhí)行這個模塊的所有依賴。大家最熟知的JavaScript模塊加載器是服務(wù)于Node.js的 CommonJS和服務(wù)于Web應(yīng)用的Require.js。
export導(dǎo)出模塊,import 導(dǎo)入導(dǎo)出的模塊
不應(yīng)該對模塊使用命名空間,使用命名空間是為了提供邏輯分組和避免命名沖突
使用非相對路徑來導(dǎo)入你的外部依賴
Classic解析策略
相對導(dǎo)入的模塊是相對于導(dǎo)入它的文件進(jìn)行解析的。 因此 /root/src/folder/A.ts文件里的import { b } from "./moduleB"會使用下面的查找流程:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
對于非相對模塊的導(dǎo)入,編譯器則會從包含導(dǎo)入文件的目錄開始依次向上級目錄遍歷,嘗試定位匹配的聲明文件。
比如:
有一個對moduleB的非相對導(dǎo)入import { b } from "moduleB",它是在/root/src/folder/A.ts文件里,會以如下的方式來定位"moduleB":
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
/root/src/moduleB.ts
/root/src/moduleB.d.ts
/root/moduleB.ts
/root/moduleB.d.ts
/moduleB.ts
/moduleB.d.ts
Node解析策略
在Node.js里導(dǎo)入是通過require函數(shù)調(diào)用進(jìn)行的。 Node.js會根據(jù) require的是相對路徑還是非相對路徑做出不同的行為
非相對模塊名的解析是個完全不同的過程。Node會在一個特殊的文件夾 node_modules
里查找你的模塊。node_modules
可能與當(dāng)前文件在同一級目錄下,或者在上層目錄里。 Node會向上級目錄遍歷,查找每個node_modules
直到它找到要加載的模塊。
TypeScript解析模塊
TypeScript是模仿Node.js運(yùn)行時的解析策略來在編譯階段定位模塊定義文件。 因此,TypeScript在Node解析邏輯基礎(chǔ)上增加了TypeScript源文件的擴(kuò)展名( .ts,.tsx和.d.ts)。 同時,TypeScript在 package.json里使用字段"typings"來表示類似"main"的意義 - 編譯器會使用它來找到要使用的"main"定義文件。