av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)TypeScript教程:TypeScript3.1介紹

元組和數(shù)組上的映射類型

在 TypeScript 3.1 中,元組和數(shù)組上的映射對象類型現(xiàn)在產(chǎn)生新的元組/數(shù)組,而不是創(chuàng)建一個新的類型,其中的成員,比如push(),pop()length將被轉(zhuǎn)換。例如:

成都創(chuàng)新互聯(lián)長期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為坊子企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),坊子網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

type MapToPromise = { [K in keyof T]: Promise };

type Coordinate = [number, number]

type PromiseCoordinate = MapToPromise; // [Promise, Promise]

MapToPromise使用一種類型T,當(dāng)該類型是一個元組,例如Coordinate,它只轉(zhuǎn)換數(shù)字屬性。在[number, number]中,有兩個數(shù)字命名的屬性:01。當(dāng)給出這樣的元組時,MapToPromise將創(chuàng)建一個新的元組,其中01屬性是原始類型的Promises。因此,結(jié)果類型PromiseCoordinate最終會得到類型[Promise, Promise]。

函數(shù)的屬性聲明

TypeScript 3.1 能夠在函數(shù)聲明和const-declared functons 上定義屬性,只需在同一范圍內(nèi)分配這些函數(shù)的屬性即可。這允許我們編寫規(guī)范的JavaScript代碼而不求助于namespace。例如:

function readImage(path: string, callback: (err: any, image: Image) => void) {
    // ...
}

readImage.sync = (path: string) => {
    const contents = fs.readFileSync(path);
    return decodeImageSync(contents);
}

在這里,我們有一個以非阻塞異步方式讀取圖像的readImage函數(shù)。除了readImage外,我們在readImage提供了一個方便的函數(shù),名為readImage.sync。

雖然ECMAScript導(dǎo)出通常是提供此功能的更好方式,但這種新的支持允許使用此樣式編寫的代碼“僅僅工作” TypeScript。另外,這種屬性聲明方法讓我們在React無狀態(tài)功能組件(SFCs)上表達(dá)常用模式,例如defaultPropspropTypes。

export const FooComponent => ({ name }) => (
    
Hello! I am {name}
); FooComponent.defaultProps = { name: "(anonymous)", };

更具體地說,同態(tài)映射類型類似于上面的形式。

使用 typesVersions 進(jìn)行版本選擇

來自社區(qū)的反饋以及相關(guān)的經(jīng)驗(yàn)告訴我們,利用最新的TypeScript功能同時也容納舊版本的用戶是很困難的。TypeScript引入了一項(xiàng)名為typesVersions的新功能,以幫助滿足這些方案。

在 TypeScript 3.1 中使用節(jié)點(diǎn)模塊分辨率時,當(dāng) TypeScript 破解打開package.json文件以確定需要讀取哪些文件時,它首先會查看名為typesVersions的新字段。帶有typesVersions字段的package.json可能如下所示:

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    ">=3.1": { "*": ["ts3.1/*"] }
  }
}

package.json告訴TypeScript檢查當(dāng)前版本的TypeScript是否正在運(yùn)行。如果它是3.1或更高版本,它會計(jì)算出您相對于包導(dǎo)入的路徑,并從包的ts3.1文件夾中讀取。這就是{ "*": ["ts3.1/*"] }表達(dá)的意思 - 如果你現(xiàn)在熟悉路徑映射,它的工作原理就是這樣的。

因此,在上面的示例中,如果我們從"package-name"中導(dǎo)入,在TypeScript 3.1中運(yùn)行時,我們將嘗試從[...]/node_modules/package-name/ts3.1/index.d.ts(和其他相關(guān)路徑)解析。如果我們從package-name/foo導(dǎo)入,我們將嘗試尋找[...]/node_modules/package-name/ts3.1/foo.d.ts[...]/node_modules/package-name/ts3.1/foo/index.d.ts。

如果我們在這個例子中沒有在 TypeScript 3.1 中運(yùn)行怎么辦?好吧,如果typesVersions中沒有匹配的字段,TypeScript會回退到types字段,因此 TypeScript 3.0 及更早版本將被重定向到[...]/node_modules/package-name/index.d.ts。

匹配行為

TypeScript決定編譯器和語言版本是否匹配的方式是使用Node的semver范圍。

多個字段

typesVersions 可以支持多個字段,其中每個字段名稱由要匹配的范圍指定。

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    ">=3.2": { "*": ["ts3.2/*"] },
    ">=3.1": { "*": ["ts3.1/*"] }
  }
}

由于范圍可能會重疊,因此確定應(yīng)用哪種重定向是特定于訂單的。這意味著在上面的示例中,即使>=3.2>=3.1匹配器都支持 TypeScript 3.2 及更高版本,反轉(zhuǎn)順序也可能有不同的行為,因此上述示例將不等同于以下示例:

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    // NOTE: this doesn't work!
    ">=3.1": { "*": ["ts3.1/*"] },
    ">=3.2": { "*": ["ts3.2/*"] }
  }
}

文章名稱:創(chuàng)新互聯(lián)TypeScript教程:TypeScript3.1介紹
當(dāng)前URL:http://uogjgqi.cn/article/dhjehoc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流