摘要:泛型通過(guò)在函數(shù)接口類變量名后使用定義。抽象類可以包括具體實(shí)現(xiàn)一個(gè)類只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。該開(kāi)源項(xiàng)目目前由社區(qū)進(jìn)行維護(hù)。通常通過(guò)中的字段,或者聲明文件進(jìn)行聲明。
TypeScript 是 Javascript 的一個(gè)超集,提高了代碼的可讀性和可維護(hù)性。Typescript 官網(wǎng)提供的文檔已經(jīng)相當(dāng)完善,但完整地看一遍需要一定的時(shí)間,本文試將 TypeScript 中要點(diǎn)提出,縮略為一文,用于瀏覽要點(diǎn)、快速?gòu)?fù)習(xí)。1. 類型 1.1 原始類型定義
boolean/number/string/null/undefined
其中 null/undefined 是 TypeScript 中任何類型的子類型。
1.2 空值、任意值、枚舉、Nevervoid/any/enum/never
void 指空值,若用于變量,則該變量只能賦值為 null/undefined;若用于函數(shù),則該函數(shù)返回值為 空/null/undefined。
any 指任意值。TypeScript 中變量賦值后類型是無(wú)法改變的,但 any 類型的變量可以改變?yōu)槿我庵怠#暶髯兞壳覠o(wú)法類型推論時(shí)默認(rèn)為 any 類型)
enum 指枚舉類型,取值可以枚舉出來(lái)。
enum Color {Red, Green, Blue} let c: Color = Color.Green;
never 指不存在的值的類型,例如異常,函數(shù)無(wú)限循環(huán)無(wú)法返回等。
1.3 數(shù)組類型定義TypeScript 中數(shù)組類型有多種定義方式,羅列如下:
1.類型 + 方括號(hào)
let list: number[] = [1, 2, 3];
2.數(shù)組泛型 Array<元素類型>
let list: Array= [1, 2, 3];
3.元組 Tuple
表示一個(gè)已知元素?cái)?shù)量和類型的數(shù)組
let x: [string, number] = ["1", 2]
4.接口定義類型
interface NumberArray { [index: number]: number; } let x: NumberArray = [1, 1, 2, 3, 5];1.4 函數(shù)類型
TypeScript 中函數(shù)類型有多種定義方式,羅列如下:
1.函數(shù)聲明中類型定義
function add(x: number, y: number): number { return x + y; }
2.函數(shù)表達(dá)式中類型定義
let myAdd = function(x: number, y: number): number { return x + y; }
3.箭頭函數(shù)中類型定義
let myAdd = (x: number, y: number): number => { return x + y; }
4.接口定義類型
interface Add { (x: number, y: number): number; } let myAdd: Add = function(num1, num2) { return num1 + num2; }1.5 對(duì)象類型
TypeScript 中對(duì)象類型有多種定義方式,羅列如下:
1.object
let obj: object = {test: 1};
2.接口定義類型
interface SquareConfig { color: string; width: number; } let newSquare: SquareConfig = { color: "white", width: 100 };1.6 聯(lián)合類型
聯(lián)合類型表示值為多種類型中的一種,用 | 進(jìn)行類型聯(lián)合
1.7 泛型泛型指在定義函數(shù)、接口、類時(shí),不預(yù)先指定類型,在使用時(shí)再指定。泛型通過(guò)在函數(shù)、接口、類變量名后使用 <> 定義。(類型斷言中 <> 位于變量名前)
function identity2. 類型操作 2.1 類型推論(arg: T): T { return arg; } identity ("myString")
在沒(méi)有指定類型時(shí),Typescript 會(huì)根據(jù)類型推論推斷出類型。
// 推論類型為 number let x = 1; // 推論類型為 any let y;2.2 類型斷言
類型斷言指對(duì)變量指定一個(gè)比現(xiàn)在類型更明確的類型。
類型斷言有兩種形式。
1."尖括號(hào)"語(yǔ)法:
// 聲明 someValue let someValue: any = "this is a string"; // 對(duì) someValue 類型斷言,類型為 string,比原先 any 類型更明確 let strLength: number = (someValue).length;
2."as" 語(yǔ)法(在 tsx 中只能使用 as 語(yǔ)法,因?yàn)?jsx 中 <> 會(huì)和"尖括號(hào)"語(yǔ)法混淆)
let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;2.3 類型別名
類型別名不會(huì)新建類型,是通過(guò)新建名字來(lái)引用已有類型。通過(guò) type 進(jìn)行別名定義。
type Name = string; let x: Name = "1";3. 類和接口 3.1 類
類的概念是 ES6 中提出的,類的本質(zhì)是構(gòu)造函數(shù)的語(yǔ)法糖,通過(guò) class 來(lái)創(chuàng)建。
TypeScript 中提供了 public、private 和 protected 三種修飾符,分別代表屬性或方法是共有的、私有的、受保護(hù)的。
TypeScript 中 static 修飾符修飾屬性或方法,代表屬性或方法是靜態(tài)的,即無(wú)需實(shí)例化,可以直接通過(guò)類調(diào)用。
TypeScript 中 readonly 修飾符修飾屬性,代表屬性只讀,即初始化之后不可修改。
3.2 抽象類抽象類指對(duì)類或類中部分方法進(jìn)行抽象,作為其他類繼承的基類,不能直接實(shí)例化。派生類必須實(shí)現(xiàn)抽象類中的抽象方法。
通過(guò) abstract 關(guān)鍵字定義抽象類和抽象類內(nèi)部定義的抽象方法,extends 來(lái)繼承類。
abstract class Animal { // 必須在派生類中實(shí)現(xiàn) abstract makeSound(): void; // 無(wú)須在派生類中實(shí)現(xiàn) move(): void { console.log("roaming the earch..."); } } class Dog extends Animal { makeSound (): void { console.log("barking"); } }3.3 接口
接口和抽象類有些類似,接口是對(duì)屬性和方法的抽象,不能直接實(shí)例化。接口和抽象類的區(qū)別如下:
接口是 100% 的抽象,不能含有具體的實(shí)現(xiàn)。抽象類可以包括具體實(shí)現(xiàn)
一個(gè)類只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。接口可以繼承接口、類。
接口通過(guò) interface 定義,implements 實(shí)現(xiàn)。
interface ClockInterface { alert(): void; } class Clock implements ClockInterface { alert() { console.log("Clock alert"); } }4. 其他 4.1 內(nèi)置對(duì)象
TypeScript 根據(jù) JavaScript 提供了相關(guān)的內(nèi)置對(duì)象,如 Date、Document、HTMLElement、Event、NodeList 等。具體可參考定義文件。
4.2 聲明文件以 npm 包為例,將第三方包安裝到 TypeScript 項(xiàng)目時(shí),需要聲明文件,聲明該第三方包中導(dǎo)出內(nèi)容的相關(guān)類型,這樣 TypeScript 才能進(jìn)行編譯檢查。聲明文件以 .d.ts 結(jié)尾的文件,有以下3個(gè)來(lái)源:
1.@types
TypeScript 2.0 默認(rèn)查看 ./node_modules/@types 文件夾,獲取模塊的類型定義。例如可以通過(guò)安裝 npm install --save-dev @types/node 獲取 node 類型相關(guān)聲明。該開(kāi)源項(xiàng)目 DefinitelyTyped 目前由社區(qū)進(jìn)行維護(hù)。
2.第三方包已有聲明文件
第三方包已有聲明文件,則不需要再額外安裝包,可以直接使用。通常通過(guò) package.json 中的 types 字段,或者 index.d.ts 聲明文件進(jìn)行聲明。
3.書(shū)寫(xiě)聲明文件
當(dāng)前面兩種方法都無(wú)效時(shí),可以在項(xiàng)目中書(shū)寫(xiě)聲明文件,如創(chuàng)建 types 目錄,用來(lái)管理聲明文件。聲明文件寫(xiě)法可以參考 DefinitelyTyped 中相關(guān)示例,如下為其中一個(gè)示例:
// 聲明 createABigTriangle 方法 declare function createABigTriangle(gl: WebGLRenderingContext): void; // 第三方庫(kù)是 commonjs 規(guī)范的,導(dǎo)出聲明使用 export= 這種語(yǔ)法 // 第三方庫(kù)是 ES6 規(guī)范的,導(dǎo)出聲明使用 export default 和 export 這種語(yǔ)法 export = createABigTriangle;
本文首發(fā)于個(gè)人博客:https://www.aquatalking.com/b...
(完)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/109155.html
摘要:嚴(yán)格地說(shuō),應(yīng)該是模仿實(shí)驗(yàn)。為什么覺(jué)得無(wú)從下手,看資料沒(méi)有頭緒經(jīng)驗(yàn)總結(jié)看資料需要計(jì)劃耐心和速度這里所謂的資料包括書(shū)籍文檔。建議有報(bào)銷條件的同學(xué)自己設(shè)計(jì)一塊板子學(xué)習(xí)。無(wú)法報(bào)銷的同學(xué),可以選購(gòu)一款開(kāi)發(fā)板學(xué)習(xí)。 STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門(mén)設(shè)計(jì)的ARMCortex...
摘要:進(jìn)階篇本文是繼新項(xiàng)目起手式之后的進(jìn)階踩坑配置,所以推薦先行閱讀前文完整閱讀完之后,基本可以順利在新項(xiàng)目中使用了另外特別注意不推薦在已有項(xiàng)目上強(qiáng)加,因?qū)懛ǖ慕M件跟之前的組件不兼容,若上的話需要修改之前寫(xiě)的組件配置完整版可參考,若沒(méi)配置出來(lái) vue + typescript 進(jìn)階篇 本文是繼 Vue + TypeScript 新項(xiàng)目起手式 之后的進(jìn)階+踩坑配置,所以推薦先行閱讀前文 ...
摘要:弄了一個(gè)持續(xù)更新的筆記,可以去看看,鏈接地址此篇文章的地址使用兩年后值得嗎基礎(chǔ)筆記的地址可以也可以。使用,你可以使用抽象類等功能。有關(guān)抽象類的更多信息支持,和方法,只讀屬性。 弄了一個(gè)持續(xù)更新的github筆記,可以去看看,鏈接地址:Front-End-Basics 此篇文章的地址:使用TypeScript兩年后-值得嗎? 基礎(chǔ)筆記的github地址:https://githu...
摘要:長(zhǎng)文預(yù)警字,圖。開(kāi)發(fā)并不是因?yàn)?,也不是為了取代。不知道從官方介紹來(lái)看,可以認(rèn)為它是下一代是如何腦補(bǔ)出來(lái)的。只是一個(gè)原型或?qū)嶒?yàn)性產(chǎn)品。所以,不是要取代,也不是下一代,也不是要放棄重建生態(tài)。的目前是要擁抱瀏覽器生態(tài)。 這幾天前端圈最火的事件莫過(guò)于 ry(Ryan Dahl) 的新項(xiàng)目 deno 了,很多 IT 新聞和媒體都用了標(biāo)題:下一代 Node.js。這周末讀了一遍 deno 的源碼,...
摘要:這個(gè)問(wèn)題應(yīng)該是百度或者知乎都能知道答案的,以上是自己親身學(xué)習(xí)的一些途徑方便少走一點(diǎn)彎路入門(mén)。 問(wèn)題1:前端的學(xué)習(xí)路線 基礎(chǔ)的html,css,js,推薦慕課網(wǎng)免費(fèi)課程:前端工程師路徑,極客學(xué)院免費(fèi)課程:前端工程師路徑 大概刷過(guò)就可以了,不用死記硬背某個(gè)知識(shí)點(diǎn),css跟js還需要加深學(xué)習(xí)的,在實(shí)戰(zhàn)過(guò)程中不懂就去查文檔 基礎(chǔ)的ps切圖能力 慕課網(wǎng)ps基礎(chǔ)課程 擁有自己的虛擬主機(jī) 傳送...
閱讀 1626·2021-10-25 09:46
閱讀 3209·2021-10-08 10:04
閱讀 2354·2021-09-06 15:00
閱讀 2767·2021-08-19 10:57
閱讀 2077·2019-08-30 11:03
閱讀 969·2019-08-30 11:00
閱讀 2370·2019-08-26 17:10
閱讀 3545·2019-08-26 13:36