摘要:聲明和結(jié)構(gòu)在中,支持和這樣的聲明方式。解構(gòu)就是將聲明的一組變量與相同結(jié)構(gòu)的數(shù)組或者對象的元素數(shù)值一一對應(yīng),并將變量相對應(yīng)元素進行賦值。
學(xué)習(xí)Angular 2 , 《揭秘Angular 2》讀書筆記。Angular2 選擇 TypeScript 作為其官方最主要的構(gòu)建語音,這意味著掌握 TypeScript 語音將更有利于高效地開發(fā) Angular 應(yīng)用。
聲明和結(jié)構(gòu)在TypeScript 中,支持var、let 和 const 這樣的聲明方式。
let 聲明
let 與 var 聲明變量的寫法類似,示例代碼如下:
let hello = "Hello Angular";
不同于var, let 聲明的變量旨在塊級作用域內(nèi)有效,示例代碼如下:
function f(input: boolean) { let a = 100; if(input) { let b = a + 1; // 運行正確 return b; } return b; // 錯誤, b沒有被定義 }
這里定義了兩個變量 a 和 b ,a 的作用域是在f()函數(shù)體內(nèi),而b是在if這個語句塊中。塊級作用域還有幾點需要注意的:
不能在它的聲明之前被讀取或賦值
在同樣的作用域中,let 不允許變量被重復(fù)聲明
還需要注意 let 聲明在下面兩種函數(shù)入?yún)⒌膶Ρ龋?/p>
function funA(x) { let x = 100; // 報錯,x已經(jīng)在函數(shù)入?yún)⒙暶?} // 增加了判斷條件組成的新的塊級作用域 function funB(condition, x) { if(condition) { let x = 100; // 運行正常 return x; } return x; } funB(false, 0); // 返回 0 funB(true, 0); // 返回 100
const 聲明
const 聲明與 let 聲明相似,它與 let 擁有相同的作用域規(guī)則,但 const 聲明的是常量,常量不能被重新賦值。但是如果定義的常量是對象,對象里的屬性值是可以被重新賦值的。示例代碼如下:
const CAT_AGE = 9; const cat = { name: "kitty", age: CAT_AGE } // 錯誤 CAT_AGE = 10; // 錯誤 cat = { name: "Danie", age: CAT_AGE } cat.name = "Jason"; // 正確
解構(gòu)
解構(gòu)是ES6中一個重要特性。解構(gòu)就是將聲明的一組變量與相同結(jié)構(gòu)的數(shù)組或者對象的元素數(shù)值一一對應(yīng),并將變量相對應(yīng)元素進行賦值。
在 TypeScript 中支持?jǐn)?shù)組解構(gòu)和對象解構(gòu)。
數(shù)組解構(gòu)
數(shù)據(jù)結(jié)構(gòu)是最簡單的解構(gòu)類型,示例代碼如下:
let input = [1, 2]; let [first, second] = input; console.log(first); // 相當(dāng)于 input[0]: 1; console.log(second); // 相當(dāng)于 input[1]: 2 // 也可作用于已聲明的變量: [first, second] = [second, first]; // 變量變換 // 或作用于函數(shù)參數(shù) function f([first, second] = [number, number]) { console.log(first + second); } f([1, 2]); // 輸出 3
有時,我們會看到如 let[first, ...rest] 使用 “...” 這樣的語句,“...” 三個連續(xù)小數(shù)點表示的是展開操作符,用于創(chuàng)建可變長的參數(shù)列表,使用起來非常方便,示例代碼如下:
let [first, ...rest] = [1, 2, 3, 4]; console.log(first); // 輸出 1 console.log(rest); // 輸出 [2, 3, 4];
對象解構(gòu)
對象解構(gòu)讓我們的代碼更加簡潔,可讀性強,示例代碼如下:
let test = { x: 0, y: 10, z: 20 }; let {x, y, z} = test; console.log(x, y, z); // 輸出 0, 10, 20函數(shù)
函數(shù)定義
在TypeScript中支持函數(shù)聲明和函數(shù)表達式的寫法,示例代碼如下:
// 函數(shù)聲明寫法 function maxA(x: number, y: number): number { return x > y? x : y; } // 函數(shù)表達式寫法 let maxB = function(x: number, y: number): number { return x > y? x : y; }
在上例中,參數(shù)類型和返回值類型這兩部分都會被檢查。在調(diào)用時,只做參數(shù)類型和個數(shù)的匹配,不做參數(shù)名的校驗。
可選參數(shù)
在 TypeScript 中,被調(diào)函數(shù)的每個參數(shù)都是 必傳 的,也就是說傳遞給函數(shù)的參數(shù)個數(shù)必須和函數(shù)定義時的參數(shù)一致,示例代碼如下:
function max(x: number, y: number): number { return x > y? x: y; } let result1 = max(2); // 報錯 let result2 = max(2, 4); // 正常
但是,在現(xiàn)實開發(fā)中,我們需要根據(jù)實際情況來決定是否傳入某個參數(shù)的情況,TypeScript 也提供了可選參數(shù)語法,即在參數(shù)名旁邊加上 ? 來使其變成可變參數(shù),需要注意的是,可選參數(shù)必須位于必選參數(shù)的 后面 ,示例代碼如下:
function max(x: number, y?: number): number { if(y) { return x > y? x: y; } else { return x; } } let result1 = max(2); // 正常 let result2 = max(2, 4); // 正常 let result3 = max(2, 4, 7); // 報錯
默認(rèn)參數(shù)
TypeScript 還支持初始化默認(rèn)參數(shù),如果函數(shù)的某個參數(shù)設(shè)置了默認(rèn)值,當(dāng)該函數(shù)被調(diào)用時,如果沒有給這個參數(shù)傳值或者傳的值為 undefined 時,這個參數(shù)的值就是設(shè)置的默認(rèn)值,示例代碼如下:
function max(x: number, y = 4): number { return x > y? x: y; } let result1 = max(2); // 正常 let result2 = max(2, 4); // 正常 let result3 = max(2, undefined); // 正常
帶默認(rèn)值的參數(shù)不必放在必選參數(shù)后面,但如果默認(rèn)值參數(shù)放到了必選參數(shù)前面,用戶必選顯式地傳入 undefined, 示例代碼如下:
function max(x = 2, y: number): number { return x > y? x: y; } let result1 = max(2); // 報錯 let result2 = max(undefined, 4); // 正常 let result3 = max(2, 4); // 正常
剩余參數(shù)
當(dāng)我們需要同時操作多個參數(shù),或者不知道會有多少個參數(shù)傳遞進來的時候,就需要用到 TypeScript 里的剩余參數(shù)。示例代碼如下:
function sum(x:number, ...restOfNumber:number[]): number { // 是不是覺得...特別熟悉,就是上面說的展開操作符 let result = x; for(let i = 0; i < restOfNumber.length; i++) { result += restOfNumber[i]; } return result; } let result = sum(1, 2, 3, 4, 5); console.log(result); // 輸出 15
函數(shù)重載
函數(shù)重載是通過為同一個函數(shù)提供多個函數(shù)類型定義來達到實現(xiàn)多種功能的母的。TypeScript 可以支持函數(shù)的重載,示例代碼如下:
function css(config: {}); function css(config: string, value: string);
在上面的例子種,這個函數(shù)有2種重載方法,編譯器會根據(jù)參數(shù)類型來判斷該調(diào)用哪個函數(shù)。TypeScript 的函數(shù)重載通過查找重載列表來實現(xiàn)匹配,因此,在實現(xiàn)重載方法時,建議將最精確的定義放在最前面。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82300.html
摘要:添加了可選的靜態(tài)類型注意并不是強類型和基于類的面向?qū)ο缶幊?。類類型接口示例接口更注重功能的設(shè)計,抽象類更注重結(jié)構(gòu)內(nèi)容的體現(xiàn)模塊中引入了模塊的概念,在中也支持模塊的使用。 一:Typescript簡介 維基百科: TypeScript是一種由微軟開發(fā)的自由和開源的編程語言。它是JavaScript的一個嚴(yán)格超集,并添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊獭#的首席架構(gòu)師以及Delp...
摘要:為了由簡入繁,不妨將這些類型劃分為基本類型復(fù)合類型。以下將漸進式的對的這些類型進行了解。實際上,有一種屬性描述對象,是通過獲取的。但無論如何,類型檢查是可以排除大部分錯誤的。在函數(shù)的類型聲明中,繼續(xù)來鞏固這條規(guī)則的寫法。 幾個月前把 ES6 的特性都過了一遍,收獲頗豐。現(xiàn)在繼續(xù)來看看 TypesScript(下文簡稱為 TS)。限于經(jīng)驗,本文一些總結(jié)如有不當(dāng),歡迎指正。 概述 官網(wǎng)有這...
摘要:靜態(tài)屬性靜態(tài)方法目前支持靜態(tài)方法表示,類屬性及靜態(tài)屬性目前作為提案還未正式成為標(biāo)準(zhǔn)。在中,抽象類不能用來實例化對象,主要做為其它派生類的基類使用。不同于接口,抽象類可以包含成員的實現(xiàn)細(xì)節(jié)。中也是這樣規(guī)定的抽象類不允許直接被實例化。 嘗試重寫 在此之前,通過《JavaScript => TypeScript 入門》已經(jīng)掌握了類型聲明的寫法。原以為憑著那一條無往不利的規(guī)則,就可以開開心心的...
摘要:基本類型在中,提供了一下基本數(shù)據(jù)類型布爾類型數(shù)據(jù)類型字符串類型數(shù)組類型元組類型枚舉類型任意值類型和類型類型其中元組枚舉任意值類型和類型是有別與的特有類型。布爾類型布爾類型是最簡單的數(shù)據(jù)類型,只有和兩種值。 學(xué)習(xí)Angular 2 , 《揭秘Angular 2》讀書筆記。Angular2 選擇 TypeScript 作為其官方最主要的構(gòu)建語音,這意味著掌握 TypeScript 語音將更...
摘要:現(xiàn)在,出現(xiàn)了更多本身支持或者通過插件支持語法智能提示糾錯甚至是內(nèi)置編譯器的文本編輯器和。 TypeScript是什么 TypeScript是JavaScript的一個超集 TypeScript需要編譯為JavaScript才能運行(語法糖) TypeScript提供了類型系統(tǒng),規(guī)范類似Java TypeScript提供了ES6的支持,也可以支持部分ES7草案的特性,不用擔(dān)心TypeS...
閱讀 3814·2021-11-17 09:33
閱讀 2031·2021-10-26 09:51
閱讀 1547·2021-09-29 09:44
閱讀 1697·2019-08-30 15:55
閱讀 1458·2019-08-30 15:52
閱讀 2340·2019-08-30 15:43
閱讀 3446·2019-08-29 17:00
閱讀 2316·2019-08-29 16:23