成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

15個Typescript 5.0 中重要的新功能快速了解一下

開發 前端
作為一種在開發人員中越來越受歡迎的編程語言,TypeScript 不斷發展,帶來了大量的改進和新功能。在本文中,我們將深入研究 TypeScript 的最新迭代版本 5.0,并探索其最值得注意的更新。

作為一種在開發人員中越來越受歡迎的編程語言,TypeScript 不斷發展,帶來了大量的改進和新功能。在本文中,我們將深入研究 TypeScript 的最新迭代版本 5.0,并探索其最值得注意的更新。

1.裝飾器

TypeScript 5.0 引入了改進的裝飾器系統,改進了類型檢查和元數據生成。 裝飾器現在可以更無縫地與類型系統一起工作,使您能夠編寫更清晰、更健壯的代碼。下面是方法裝飾器如何工作的一個簡單示例:

function log<This, Args extends any[], Return>(
target: (this: This, ...args: Args) => Return,
context: ClassMethodDecoratorContext<
This,
(this: This, ...args: Args) => Return
>
) {
const methodName = String(context.name);


function replacementMethod(this: This, ...args: Args): Return {
console.log(`LOG: Entering method '${methodName}'.`);
const result = target.call(this, ...args);
console.log(`LOG: Exiting method '${methodName}'.`);
return result;
}


return replacementMethod;
}


class Calculator {
@log
add(a: number, b: number): number {
return a + b;
}
}


const calculator = new Calculator();
console.log(calculator.add(2, 3));
// "LOG: Entering method 'add'."
// "LOG: Exiting method 'add'."
// 5

在此示例中,@log 裝飾器會在每次調用方法時記錄方法名稱。除了方法裝飾器,TypeScript 5.0 還支持自動訪問器裝飾器、Getter 和 Setter 裝飾器等。

2. const 類型參數

在 TypeScript 5.0 之前,其推理通常會選擇更通用的類型,例如 將 ["Alice", "Bob", "Eve"] 推斷為 string[],如果您想要更具體的類型,則必須為其添加 as const:

// string[]
const a = ["Alice", "Bob", "Eve"]


// readonly ["Alice", "Bob", "Eve"]
const b = ["Alice", "Bob", "Eve"] as const

TypeScript 5.0 允許您將 const 修飾符添加到類型參數聲明中:

declare function fnGood<const T extends readonly string[]>(args: T): void;


// T is readonly ["a", "b", "c"]
fnGood(["a", "b" ,"c"]);

但請記住,const 修飾符僅影響在調用中編寫的對象、數組和原始表達式的推斷,因此不會(或不能)用 as const 修改的參數將看不到任何 行為改變:

declare function fnGood<const T extends readonly string[]>(args: T): void;
const arr = ["a", "b" ,"c"];


// 'T' is still 'string[]'-- the 'const' modifier has no effect here
fnGood(arr);

3. extends支持多配置文件

TypeScript 5.0 帶來了在 tsconfig.json 中擴展多個配置文件的能力。此功能使跨項目共享和管理配置變得更加容易。以下是如何使用多個配置文件的示例:

{
"extends": ["./config/base", "./config/jest"],
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"strict": true
}
}

在此示例中,配置文件擴展了基本配置和玩笑配置,允許您根據需要組合和覆蓋設置。

4. 所有枚舉都是聯合枚舉

在 TypeScript 5.0 中,所有枚舉現在都被視為聯合枚舉。 聯合枚舉為使用枚舉值提供了更好的類型安全性和改進的人體工程學。 這是一個例子:

enum E {
A = 10 * 10, // Numeric literal enum member
B = 'foo', // String literal enum member
C = Math.random(), // Opaque computed enum member
}


function getStringValue(e: E): string {
return String(e);
}


const val = getStringValue(E.A); // "100"

TypeScript 5.0 通過為每個計算成員創建唯一類型,設法將所有枚舉變成聯合枚舉。這意味著現在可以縮小所有枚舉的范圍,并將其成員也作為類型引用。

5. — moduleResolution 捆綁器

TypeScript 5.0 引入了一種新的模塊解析策略,稱為 bundler。此策略旨在與 Webpack 和 Rollup 等捆綁器一起使用,從而實現更高效和簡化的構建過程(就像過去 Node.js 模塊中的任何相關導入一樣,需要包含文件擴展名)。

要啟用 bundler 模塊解析策略,請在 tsconfig.json 中使用以下配置:

{
"compilerOptions": {
"moduleResolution": "bundler"
}
}

6.自定義分辨率標志

TypeScript 5.0 添加了幾個新標志來自定義模塊解析過程。這些標志對如何解析模塊提供了更精細的控制,使您可以微調構建過程。 

以下是簡要概述:

  • --allowImportingTsExtensions:允許導入帶有 TypeScript 特定擴展名的 TypeScript 文件,例如 .ts、.mts 或 .tsx。
  • --resolvePackageJsonExports:強制 TypeScript 在從 node_modules 中讀取包時查詢 package.json 文件的導出字段。
  • --resolvePackageJsonImports:強制 TypeScript 在執行以 # 開頭的查找時查詢 package.json 文件的導入字段。
  • --allowArbitraryExtensions:允許通過查找 {file basename}.d.{extension}.ts 形式的聲明文件來導入具有未知擴展名的文件。
  • --customConditions:獲取當 TypeScript 從 package.json 的導出或導入字段解析時要考慮的附加條件列表。

7. — verbatimModuleSyntax

TypeScript 5.0 中新的 --verbatimModuleSyntax 標志允許您在發出 JavaScript 代碼時保留原始模塊語法。 此功能在使用捆綁器時特別有用,因為它不需要額外的轉換。例如:

// Erased away entirely.
import type { A } from "a";


// Rewritten to 'import { b } from "bcd";'
import { b, type c, type d } from "bcd";


// Rewritten to 'import {} from "xyz";'
import { type xyz } from "xyz";

要啟用此標志,請將其添加到您的 tsconfig.json 中:

{
"compilerOptions": {
"verbatimModuleSyntax": true
}
}

8.支持 export type*

TypeScript 5.0 引入了對 export type * 語法的支持,它允許您從另一個模塊重新導出所有類型。 

此語法對于創建僅類型模塊或聚合來自多個來源的類型特別有用。 

這是一個例子:

// types.ts
export type { Foo } from './foo';
export type { Bar } from './bar';


// index.ts
export type * from './types';
// Also support
export type * as Types from './types';

在此示例中,使用 export type * 語法將 types.ts 模塊中的所有類型重新導出到 index.ts 模塊中。

9. JSDoc 中的@satisfies 支持

TypeScript 5.0 中新的@satisfies JSDoc 標記使您能夠指定函數實現滿足特定接口。 在使用結構類型或使用 TypeScript 對 JavaScript 代碼進行類型檢查時,此功能特別有用。 

這是一個例子:

// interface Greeter {
// greet(name: string): number;
// }


/**
* @typedef {Function} Greeter
* @param {string} name
* @returns {string}
*/


/**
* @satisfies {Greeter}
*/
function greeter(name: string) {
return `Hello, ${name}!`;
}

在這個例子中,greeter 函數被標記為@satisfies JSDoc 標簽,表明它滿足 Greeter 接口。

10. JSDoc 中的@overload 支持

TypeScript 5.0 添加了對 @overload JSDoc 標記的支持,允許您在 JavaScript 代碼中為單個實現定義多個函數簽名。 

在處理需要支持多種參數類型或形狀的復雜函數時,此功能特別有用。 

這是一個例子:

/**
* @overload
* @param {string} a
* @param {string} b
* @return {string}
*/


/**
* @overload
* @param {number} a
* @param {number} b
* @return {number}
*/


/**
* @param {string | number} a
* @param {string | number} b
*/
export function add(a, b) {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
} else if (typeof a === 'string' && typeof b === 'string') {
return a.concat(b);
}
}


const numResult = add(1, 2); // 3
const strResult = add('hello', 'world'); // "helloworld"
const errResult = add('hello', 123); // Error: No overload matches this call.

在此示例中,add 函數標有兩個 @overload JSDoc 標記,指定它可以處理數字和字符串作為參數。

11. 在 — build 下傳遞特定于發射的標志

TypeScript 5.0 引入了在使用 --build 標志時傳遞 emit-specific 標志的能力。此功能允許您在構建項目時微調項目的輸出,從而更好地控制構建過程。部分消息:

  • --declaration:從項目中的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。
  • --emitDeclarationOnly:只輸出 d.ts 文件,不輸出 JavaScript 文件。
  • --declarationMap:為 d.ts 文件創建 sourcemaps。
  • --sourceMap:為發出的 JavaScript 文件創建源映射文件。
  • --inlineSourceMap:在發出的 JavaScript 中包含源映射文件。

12. 編輯器中不區分大小寫的導入排序

TypeScript 5.0 通過不區分大小寫改進了編輯器中的導入排序。在組織導入時,此更改會導致更自然和直觀的排序順序,從而使代碼更清晰、更易讀。

13. 詳盡的開關/外殼完成

TypeScript 5.0 通過提供詳盡的 switch/case 補全增強了代碼補全體驗。 在處理聯合類型時,編輯器現在可以建議所有可能的情況,減少遺漏情況的機會,并使編寫全面的 switch 語句變得更加容易。 這是一個例子:

type Animal = "cat" | "dog" | "fish";


function speak(animal: Animal): string {
switch (animal) {
// TypeScript 5.0 will suggest all possible cases: "cat", "dog", "fish"
}
}

14. 速度、內存和包大小優化

TypeScript 5.0 帶來了各種性能優化,包括更快的類型檢查、更少的內存使用和更小的包大小。這些改進使使用 TypeScript 變得更加愉快,確保了流暢高效的開發體驗。

15.重大變更和棄用

與任何主要版本一樣,TypeScript 5.0 引入了一些重大更改和棄用。 在升級之前查看發行說明并徹底測試您的項目至關重要。 

一些顯著的重大變化包括:

  • 運行時要求:TypeScript 現在以 ECMAScript 2018 為目標。TypeScript 包還設置了最低預期引擎 12.20。對于 Node 用戶,這意味著 TypeScript 5.0 的最低版本要求至少為 Node.js 12.20 及更高版本。
  • lib.d.ts 更改:更改 DOM 類型的生成方式可能會對現有代碼產生影響。值得注意的是,某些屬性已從數字轉換為數字文字類型,并且用于剪切、復制和粘貼事件處理的屬性和方法已跨接口移動。
  • API 重大更改:移至模塊,刪除了一些不必要的接口并進行了一些正確性改進。
  • 關系運算符中禁止的隱式強制轉換:
function func1(ns: number | string) {
return ns * 4; // Error, possible implicit coercion
}


function func2(ns: number | string) {
return ns > 4; // Error, possible implicit coercion
}


function func3(ns: number | string) {
return +ns > 4; // OK
}
  • Enum Overhaul:在 TypeScript 5.0 中你不會看到那些奇怪的 enum 問題,這里有兩個重要的錯誤改進:
// Part1: Assigning an out-of-domain literal to an enum type 
// now errors out as one would expect.
enum SomeEvenDigit {
Zero = 0,
Two = 2,
Four = 4,
}


// Now correctly an error
let m: SomeEvenDigit = 1;


// Part2: Enums declaring values with mixed numeric and
// indirect string enum references incorrectly create an all-numeric enum.
enum Letters {
A = 'a',
}
enum Numbers {
one = 1,
two = Letters.A,
}


// Now correctly an error
const t: number = Numbers.two;

對構造函數中的參數裝飾器進行更準確的類型檢查 — experimentalDecorators

一些已棄用的配置和配置值。

結論

總之,TypeScript 5.0 帶來了許多新功能,那么,您覺得哪個功能最有用?

責任編輯:華軒 來源: web前端開發
相關推薦

2020-05-11 15:01:16

JavaJKD 15工具

2020-02-10 14:26:10

GitHub代碼倉庫

2020-12-01 17:46:24

FossilGit

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2011-07-27 14:41:59

Oracle ERP

2020-12-10 08:44:35

WebSocket輪詢Comet

2011-03-01 14:08:51

Fedora 15

2019-06-24 09:57:39

網絡工具調試

2020-03-01 17:53:38

Excel大數據微軟

2014-10-30 14:42:57

Android 5.0Google

2023-04-10 06:59:17

Linux桌面環境

2020-09-22 07:33:03

開發技能代碼

2020-09-26 22:20:52

ML自動機器學習深度學習

2022-09-14 15:11:06

Linux防火墻

2018-06-05 17:40:36

人工智能語音識別

2024-04-11 12:19:01

Rust數據類型

2012-03-20 09:25:29

2019-02-20 14:16:43

2021-09-13 14:18:29

iOS蘋果系統

2010-03-18 15:10:54

VSTS 2010CodedUI Tes
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞的视频网站 | 欧美自拍网站 | 欧美综合国产精品久久丁香 | 亚洲国产精品va在线看黑人 | 欧美激情在线精品一区二区三区 | 亚洲国产一区视频 | 女同久久另类99精品国产 | 国产丝袜一区二区三区免费视频 | 久久久久国产成人精品亚洲午夜 | 91精品国产91久久久 | 91在线视频免费观看 | 欧美日韩精品免费观看 | 午夜国产一级 | 操到爽 | 日韩精品在线一区 | 成人性视频在线 | 日本不卡一区二区三区 | 福利视频一区二区三区 | 国产一区在线免费观看视频 | 九色在线视频 | 不卡一区二区三区四区 | 亚洲欧美国产一区二区三区 | 国产小视频在线 | 欧美一级特黄aaa大片在线观看 | 久久在线视频 | 国产福利91精品 | 天天干天天操天天射 | 澳门永久av免费网站 | 99久久精品一区二区毛片吞精 | 久久成人精品视频 | 欧美精品国产一区二区 | 亚洲国产成人精品女人久久久 | 国产精品久久久久久久久久免费看 | 国产欧美一区二区三区日本久久久 | 在线免费看黄 | 一区二区三区高清在线观看 | 亚洲毛片 | 亚洲成色777777在线观看影院 | 国产亚洲一区二区在线观看 | 一级毛片免费 | 91一区|