AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

TypeScript 5.3 來了,一大波新特性

來源: 責(zé)編: 時(shí)間:2023-11-16 09:39:51 281觀看
導(dǎo)讀根據(jù) TypeScript 路線圖,TypeScript 5.3 計(jì)劃于 11 月 14 日發(fā)布。下面是該版本帶來的新特性:導(dǎo)入屬性導(dǎo)入類型中穩(wěn)定支持 resolution-mode所有模塊模式均支持 resolution-modeswitch (true) 縮小范圍對布爾值進(jìn)行比較

7t128資訊網(wǎng)——每日最新資訊28at.com

根據(jù) TypeScript 路線圖,TypeScript 5.3 計(jì)劃于 11 月 14 日發(fā)布。7t128資訊網(wǎng)——每日最新資訊28at.com

圖片7t128資訊網(wǎng)——每日最新資訊28at.com

下面是該版本帶來的新特性:7t128資訊網(wǎng)——每日最新資訊28at.com

  • 導(dǎo)入屬性
  • 導(dǎo)入類型中穩(wěn)定支持 resolution-mode
  • 所有模塊模式均支持 resolution-mode
  • switch (true) 縮小范圍
  • 對布爾值進(jìn)行比較的縮小范圍
  • 通過 Symbol.hasInstance 進(jìn)行 instanceof 類型縮小
  • 實(shí)例字段上的 super 屬性訪問檢查
  • 嵌入提示支持跳轉(zhuǎn)到類型的定義
  • 通過跳過 JSDoc 解析進(jìn)行優(yōu)化
  • 通過比較非標(biāo)準(zhǔn)交集進(jìn)行優(yōu)化
  • 整合 tsserverlibrary.js 和 typescript.js

導(dǎo)入屬性

TypeScript 5.3 支持導(dǎo)入屬性提案的最新更新。導(dǎo)入屬性的一個(gè)用例是向運(yùn)行時(shí)提供有關(guān)模塊的預(yù)期格式的信息。7t128資訊網(wǎng)——每日最新資訊28at.com

// 希望將這個(gè)文件解釋為 JSON 數(shù)據(jù),而不是一個(gè)帶有 .json 擴(kuò)展名的可執(zhí)行/惡意的 JavaScript 文件。import obj from "./something.json" with { type: "json" };

這些屬性的內(nèi)容不會被 TypeScript 檢查,因?yàn)樗鼈兪翘囟ㄓ谒拗鳝h(huán)境的,并且會被直接保留,以便瀏覽器和運(yùn)行時(shí)環(huán)境可以處理它們(并可能會出現(xiàn)錯(cuò)誤)。7t128資訊網(wǎng)——每日最新資訊28at.com

// TypeScript 對此沒有問題,但是瀏覽器可能不支持。import * as foo from "./foo.js" with { type: "fluffy bunny" };

動態(tài) import() 調(diào)用還可以通過第二個(gè)參數(shù)使用導(dǎo)入屬性。7t128資訊網(wǎng)——每日最新資訊28at.com

const obj = await import("./something.json", {    with: { type: "json" }});

第二個(gè)參數(shù)的預(yù)期類型由名為 ImportCallOptions 的類型定義,該類型默認(rèn)情況下只需要一個(gè)名為 with 的屬性。7t128資訊網(wǎng)——每日最新資訊28at.com

注意,導(dǎo)入屬性是早期提案“導(dǎo)入斷言”的演進(jìn)版本,該提案已在 TypeScript 4.5 中實(shí)現(xiàn)。最明顯的區(qū)別是使用 with 關(guān)鍵字而不是 assert 關(guān)鍵字。但不太明顯的區(qū)別在于,現(xiàn)在運(yùn)行時(shí)可以自由地使用屬性來引導(dǎo)導(dǎo)入路徑的解析和解釋,而導(dǎo)入斷言只能在加載模塊后斷言某些特征。7t128資訊網(wǎng)——每日最新資訊28at.com

隨著時(shí)間的推移,TypeScript 將逐漸棄用舊的導(dǎo)入斷言語法,并傾向于使用導(dǎo)入屬性的提案語法。現(xiàn)有使用 assert 的代碼應(yīng)該遷移到使用 with 關(guān)鍵字。需要使用導(dǎo)入屬性的新代碼應(yīng)該使用 with。7t128資訊網(wǎng)——每日最新資訊28at.com

resolution-mode

導(dǎo)入類型中穩(wěn)定支持 resolution-mode

在 TypeScript 4.7 中,TypeScript 增加了對 /// <reference types="..." /> 中的 resolution-mode 屬性的支持,以控制特定規(guī)范符號是應(yīng)該通過 import 還是 require 語義進(jìn)行解析。7t128資訊網(wǎng)——每日最新資訊28at.com

/// <reference types="pkg" resolution-mode="require" />// 或/// <reference types="pkg" resolution-mode="import" />

考慮到導(dǎo)入屬性可以引導(dǎo)解析,并且已經(jīng)看到了合理的使用案例,TypeScript 5.3 現(xiàn)在支持 import type 的 resolution-mode 屬性。7t128資訊網(wǎng)——每日最新資訊28at.com

// 以使用 `require()` 進(jìn)行導(dǎo)入的方式解析 `pkg`import type { TypeFromRequire } from "pkg" with {  "resolution-mode": "require"};// 以使用 `import` 進(jìn)行導(dǎo)入的方式解析 `pkg`import type { TypeFromImport } from "pkg" with {  "resolution-mode": "import"};export interface MergedType extends TypeFromRequire, TypeFromImport {}

這些導(dǎo)入屬性也可以用于 import() 類型。7t128資訊網(wǎng)——每日最新資訊28at.com

export type TypeFromRequire =  import("pkg", { with: { "resolution-mode": "require" } }).TypeFromRequire;export type TypeFromImport =  import("pkg", { with: { "resolution-mode": "import" } }).TypeFromImport;export interface MergedType extends TypeFromRequire, TypeFromImport {}

所有模塊模式均支持 resolution-mode

以前,只有在 moduleResolution 選項(xiàng)為 node16 和 nodenext 時(shí)才允許使用 resolution-mode。為了更容易地專門查找用于類型的模塊,現(xiàn)在 resolution-mode 在所有其他 moduleResolution 選項(xiàng)中都能正常工作,比如 bundler、node10,在 classic 模式下則不會報(bào)錯(cuò)。7t128資訊網(wǎng)——每日最新資訊28at.com

類型縮小優(yōu)化

switch (true)

現(xiàn)在 TypeScript 5.3 能夠根據(jù) switch 中每個(gè) case 子句的條件進(jìn)行類型細(xì)化。7t128資訊網(wǎng)——每日最新資訊28at.com

function f(x: unknown) {    switch (true) {        case typeof x === "string":            // 這里,'x' 是一個(gè) 'string'            console.log(x.toUpperCase());        case Array.isArray(x):            // 這里 'x' 是一個(gè) 'string | any[]'            console.log(x.length);        default:          // 這里 'x' 是 'unknown'          // ...    }}

布爾值比較

有時(shí)候你可能會在條件語句中直接與 true 或 false 進(jìn)行比較。通常這些比較是不必要的,但可能出于代碼風(fēng)格或避免 JavaScript 真值方面的某些問題而偏好這種寫法。然而,在之前的 TypeScript 版本中,它不能正確地識別這種形式來執(zhí)行類型縮小。7t128資訊網(wǎng)——每日最新資訊28at.com

TypeScript 5.3 現(xiàn)在在縮小變量范圍時(shí)可以跟上并理解這些表達(dá)式。7t128資訊網(wǎng)——每日最新資訊28at.com

interface A {    a: string;}interface B {    b: string;}type MyType = A | B;function isA(x: MyType): x is A {    return "a" in x;}function someFn(x: MyType) {    if (isA(x) === true) {        console.log(x.a); // works!    }}

Symbol.hasInstance

JavaScript 的一個(gè)特性是可以重寫 instanceof 運(yùn)算符的行為。要實(shí)現(xiàn)這一點(diǎn),需要在 instanceof 運(yùn)算符右側(cè)的值上定義一個(gè)名為 Symbol.hasInstance 的特定方法。7t128資訊網(wǎng)——每日最新資訊28at.com

class Weirdo {    static [Symbol.hasInstance](testedValue) {        return testedValue === undefined;    }}// falseconsole.log(new Thing() instanceof Weirdo);// trueconsole.log(undefined instanceof Weirdo);

為了更好地模擬 instanceof 運(yùn)算符的行為,TypeScript 現(xiàn)在會檢查是否存在 [Symbol.hasInstance] 方法,并且該方法被聲明為類型斷言函數(shù)。如果存在這樣的方法,那么通過 instanceof 運(yùn)算符對左側(cè)測試的值將會被相應(yīng)地進(jìn)行類型縮小。7t128資訊網(wǎng)——每日最新資訊28at.com

interface PointLike {    x: number;    y: number;}class Point implements PointLike {    x: number;    y: number;    constructor(x: number, y: number) {        this.x = x;        this.y = y;    }    distanceFromOrigin() {        return Math.sqrt(this.x ** 2 + this.y ** 2);    }    static [Symbol.hasInstance](val: unknown): val is PointLike {        return !!val && typeof val === "object" &&            "x" in val && "y" in val &&            typeof val.x === "number" &&            typeof val.y === "number";    }}function f(value: unknown) {    if (value instanceof Point) {        // 可以訪問這兩個(gè)屬性 - 正確!        value.x;        value.y;        // 無法訪問這個(gè)屬性,有 'PointLike' 類型的對象,但實(shí)際上并沒有 'Point' 類型的對象。        value.distanceFromOrigin();    }}

在這個(gè)例子中,Point 定義了自己的 [Symbol.hasInstance]方法。它實(shí)際上充當(dāng)了一個(gè)對稱為 PointLike 的獨(dú)立類型的自定義類型保護(hù)程序。在函數(shù) f 中,我們能夠通過 instanceof 將 value 縮小到 PointLike 類型,但無法縮小到 Point 類型。這意味著可以訪問屬性 x 和 y,但無法訪問 distanceFromOrigin 方法。7t128資訊網(wǎng)——每日最新資訊28at.com

實(shí)例字段上的 super 屬性訪問檢查

在 JavaScript 中,可以通過 super 關(guān)鍵字訪問基類中的聲明。7t128資訊網(wǎng)——每日最新資訊28at.com

class Base {    someMethod() {        console.log("Base method called!");    }}class Derived extends Base {    someMethod() {        console.log("Derived method called!");        super.someMethod();    }}new Derived().someMethod();// 輸出結(jié)果://   Derived method called!//   Base method called!

這與編寫像 this.someMethod() 這樣的代碼是不同的,因?yàn)槟菢涌赡軙{(diào)用一個(gè)被重寫的方法,如果一個(gè)聲明根本沒有被重寫,那么通常這兩種方式是可以互換的。7t128資訊網(wǎng)——每日最新資訊28at.com

class Base {    someMethod() {        console.log("someMethod called!");    }}class Derived extends Base {    someOtherMethod() {        // These act identically.        this.someMethod();        super.someMethod();    }}new Derived().someOtherMethod();// 輸出結(jié)果://   someMethod called!//   someMethod called!

問題在于這兩種方式是不能互換使用的,因?yàn)?super 只能用于在原型上聲明的成員,而不能用于實(shí)例屬性。這意味著如果你寫了 super.someMethod(),但 someMethod 被定義為一個(gè)字段,那么就會出現(xiàn)運(yùn)行時(shí)錯(cuò)誤!7t128資訊網(wǎng)——每日最新資訊28at.com

class Base {    someMethod = () => {        console.log("someMethod called!");    }}class Derived extends Base {    someOtherMethod() {        super.someMethod();    }}new Derived().someOtherMethod();

TypeScript 5.3 現(xiàn)在更仔細(xì)地檢查 super 屬性訪問/方法調(diào)用,以查看它們是否對應(yīng)于類字段。如果是的話,現(xiàn)在會得到一個(gè)類型檢查錯(cuò)誤。7t128資訊網(wǎng)——每日最新資訊28at.com

嵌入提示支持跳轉(zhuǎn)到類型的定義

TypeScript 的嵌入提示現(xiàn)在支持跳轉(zhuǎn)到類型的定義!7t128資訊網(wǎng)——每日最新資訊28at.com

7t128資訊網(wǎng)——每日最新資訊28at.com

按住 Ctrl 鍵單擊嵌入提示可跳轉(zhuǎn)至參數(shù)類型的定義。7t128資訊網(wǎng)——每日最新資訊28at.com

通過跳過 JSDoc 解析進(jìn)行優(yōu)化

通過 tsc 運(yùn)行 TypeScript 時(shí),編譯器現(xiàn)在將避免解析 JSDoc。這不僅減少了解析時(shí)間,還減少了存儲注釋的內(nèi)存使用量以及垃圾收集所花費(fèi)的時(shí)間。可以在 --watch 模式下看到稍快的編譯速度和更快的反饋。7t128資訊網(wǎng)——每日最新資訊28at.com

通過比較非標(biāo)準(zhǔn)交集進(jìn)行優(yōu)化

在 TypeScript 中,并集和交集始終遵循特定的形式,其中交集不能包含并集類型。這意味著當(dāng)我們在 A & (B | C) 這樣的并集上創(chuàng)建交集時(shí),該交集將被標(biāo)準(zhǔn)化為 (A & B) | (A & C)。盡管如此,在某些情況下,類型系統(tǒng)仍會出于顯示目的而保留原始形式。7t128資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)例子,假設(shè)我們有 SomeType & (Type1 | Type2 | ... | Type99999NINE),我們想要確定它是否可以賦值給 SomeType,源類型是一個(gè)看起來像 (SomeType & Type1) | (SomeType & Type2) | ... |(SomeType & Type99999NINE) 的聯(lián)合類型。在檢查一個(gè)聯(lián)合類型是否可以賦值給某個(gè)目標(biāo)類型時(shí),必須檢查聯(lián)合類型的每個(gè)成員是否可以賦值給目標(biāo)類型,這可能會非常慢。7t128資訊網(wǎng)——每日最新資訊28at.com

在 TypeScript 5.3 中,當(dāng)比較類型時(shí),會快速檢查目標(biāo)類型是否存在于源交集中的任何成員中。7t128資訊網(wǎng)——每日最新資訊28at.com

整合 tsserverlibrary.js 和 typescript.js

TypeScript 本身提供了兩個(gè)庫文件:tsserverlibrary.js 和 typescript.js。在 tsserverlibrary.js 中只有特定的 API(例如 ProjectService API)。然而,這兩個(gè)是不同包,它們有許多重疊之處,在包中重復(fù)了很多代碼。更重要的是,由于自動導(dǎo)入或肌肉記憶,要始終一致地使用其中一個(gè)可能會很具有挑戰(zhàn)性。意外加載兩個(gè)模塊太容易了,代碼在不同的 API 實(shí)例上可能無法正常工作。即使它能夠正常工作,加載第二個(gè)包會增加資源使用率。7t128資訊網(wǎng)——每日最新資訊28at.com

鑒于此,TypeScript 團(tuán)隊(duì)決定整合兩者。 typescript.js 現(xiàn)在包含 tsserverlibrary.js 的內(nèi)容,并且 tsserverlibrary.js 現(xiàn)在只是重新導(dǎo)出 typescript.js。整合之后,包大小減少了 20.5%。7t128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-26564-0.htmlTypeScript 5.3 來了,一大波新特性

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 怎么理解 React Server Component 和 Next.js 的關(guān)系

下一篇: 線程剖析 - 助力定位代碼層面高耗時(shí)問題

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 轎車從天而降電動車主被撞身亡 超速搶道所致:現(xiàn)場視頻讓網(wǎng)友吵翻

    近日,上海青浦區(qū)法院判決轎車從天而降電動車主被撞身亡案,轎車車主被判有期徒刑一年。案件顯示當(dāng)時(shí)男子駕駛轎車在上海某路段行駛,前車忽然轉(zhuǎn)彎提速超車,
  • 8月總票房已突破10億!《封神》第一:口碑已經(jīng)成了

    8月5日消息,據(jù)燈塔專業(yè)版數(shù)據(jù),截至8月5日9時(shí)35分,8月總票房(含預(yù)售)已突破10億。其中,《封神》以大比分的優(yōu)勢領(lǐng)先。根據(jù)官方消息,目前該片總票房已經(jīng)超過14.
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個(gè)數(shù)字。例如,一個(gè)擁有三個(gè)或更多子項(xiàng)的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個(gè)組件或一個(gè)布局可能會
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實(shí)用文檔、數(shù)據(jù)圖表及個(gè)性化定制服務(wù)。優(yōu)點(diǎn):OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 學(xué)習(xí)JavaScript的10個(gè)理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門語言的時(shí)候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 雅柏威士忌多款單品價(jià)格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業(yè)觀察編 | 肖海林今年以來,威士忌市場開始出現(xiàn)了降溫跡象,越來越多不斷暴漲的網(wǎng)紅威士忌也開始悄然回歸市場理性。近日,LVMH集團(tuán)旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 微軟發(fā)布Windows 11新版 引入全新任務(wù)欄狀態(tài)

    近日,微軟發(fā)布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務(wù)欄等,系統(tǒng)更流暢了。更新中,Windows 11加入了專門針對平板優(yōu)化的任務(wù)欄
  • 2022爆款:ROG魔霸6 冰川散熱系統(tǒng)持續(xù)護(hù)航

    喜逢開學(xué)季,各大商家開始推出自己的新產(chǎn)品,進(jìn)行打折促銷活動。對于忠實(shí)的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現(xiàn)在的
Top