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

聊聊項目中常見的TypeScript錯誤

開發 項目管理
以下六種便是項目開發中比較常見的幾種錯誤類型,如果你想查看所有的錯誤信息和錯誤碼,可以瀏覽TypeScript 的源代碼倉庫,當然,隨著 ts 版本的更新,官網也會逐漸增加更多新的類型錯誤。

TypeScript 錯誤信息由錯誤碼和詳細信息組成。例如:TS2456 ,其中錯誤碼是以“TS”開頭 + 數字(一般是 4 位數字)結尾這樣的格式組成的字符串,用來作為特定類型錯誤的專屬代號。下面我們看一下那些常?,但在官方文檔甚少提及的類型錯誤:

1.TS2456

首先是由于類型別名循環引用了自身造成的 TS2456 類型錯誤,如下示例: 

 type T = Readonly<T>;
// TS2456: Type alias 'T' circularly references itself.

在上面這個例子中,對于 T 這個類型別名,如果 TypeScript 編譯器想知道 T 類型是什么,就需要展開類型別名賦值的 Readonly 。而為了確定 Readonly 的類型,TypeScript 編譯器需要繼續判斷入參 T 的類型,這就形成了一個循環引用,類似函數循環調用自己,如果沒有正確的終止條件,就會一直處于無限循環的狀態,所以就會報錯。

2.TS2554

另一個常?的錯誤就是TS2554,它是由于形參和實參個數不匹配造成的,如下:

function test(a: number | undefined): string {
if (a=== undefined) {
return '';
}
return a.toString();
}
test(); // TS2554: Expected 1 arguments, but got 0.
test(undefined);

之所以會報錯是因為在 ts 中,undefined 是一個特殊的類型,由于類型為 undefined,并不代表可 缺省,因此示例中的第 8 行提示了 TS2554 錯誤。

3.TS1169

TS1169 類型錯誤是在接口類型定義中由于使用了非字面量或者非唯一 symbol 類型作為屬性名造成 的,如下:

 interface Obj {
[key in 'id' | 'name']: any; // TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.
};

因為interface 類型的屬性必須是字面量類型(string、number) 或者是 unique symbol 類型,所以 在第 2 行提示了 TS1169 錯誤。

4.TS2345

TS2345 類型錯誤的原因在于傳參時由于類型不兼容造成的,如下:

enum A {
x = 'x',
y = 'y',
z = 'z',
}
enum B {
x = 'x',
y = 'y',
z = 'z',
}
function fn(val: A) {}
fn(B.x); // TS2345: Argument of type 'B.x' is not assignable to parameter of type 'A'. ;

如上所示,函數 fn 參數的 val 類型是枚舉 A,在 12 行我們傳入了與枚舉 A 類似的枚舉 B 的值,此時 ts 提示了類型不匹配的錯誤。這是因為枚舉是在運行時真正存在的對象,因此 ts 并不會判斷兩個枚舉是否可以互相兼容,所以報錯。解決這個錯誤的方式也很簡單,我們只需要讓這兩個枚舉類型互相兼容就行,比如使用類型斷言繞過 ts 的類型檢查(fn((B.x as unknown) as A);)即可。

5.TS2589

TS2589 類型錯誤是由泛型實例化遞歸嵌套過深造成的,如下:

type RepeatX<N extends number, T extends any[] = []> = T['length'] extends N?T: RepeatX<N, [...T, 'X']>;
type T1 = RepeatX<5>; // => ["X", "X", "X", "X", "X"]
// TS2589: Type instantiation is excessively deep and possibly infinite.

因為第 1 行的泛型 RepeatX 接收了一個數字類型入參 N,并返回了一個?度為 N、元素都是 'X' 的數組類型,所以第 4 行的類型 T1 包含了 5 個 "X" 的數組類型;但是第 6 行的類型 T2 的類型卻是 any,并且提 示了 TS2589 類型錯誤。這是因為 ts 在處理遞歸類型的時候,最多實例化 50 層,如果超出了遞歸層數的 限制,ts 便不會繼續實例化,并且類型會變為 top 類型 any。 對于上面的錯誤,我們使用 @ts-ignore 注釋忽略即可。

6.TS2322

TS2322 錯誤是由于字符串字面量類型定義時導致的錯誤,如下:

interface CSSProperties {
display: 'block' | 'flex' | 'grid';
}
const style = {
display: 'flex',
};
// TS2322: Type '{ display: string; }' is not assignable to type 'CSSProperties'.
// Types of property 'display' are incompatible.
// Type 'string' is not assignable to type '"block" | "flex" | "grid"'.
const cssStyle: CSSProperties = style;

在上面的例子中,CSSProperties 的 display 屬性的類型是字符串字面量類型 'block' | 'flex' | 'grid',雖然變量 style 的 display 屬性看起來與 CSSProperties 類型完全兼容,但是 TypeScript 提示了 TS2322 類型不兼容的錯 誤。這是因為變量 style 的類型被自動推斷成了 { display: string },string 類型自然無法兼容字符串字面量類型 'block' | 'flex' | 'grid',所以變量 style 不能賦值給 cssStyle。

以上六種便是項目開發中比較常見的幾種錯誤類型,如果你想查看所有的錯誤信息和錯誤碼,可以瀏覽TypeScript 的源代碼倉庫,當然,隨著 ts 版本的更新,官網也會逐漸增加更多新的類型錯誤。

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2014-05-04 16:39:49

開源項目開源產品

2022-07-07 08:01:51

Python魔法方法代碼

2020-11-04 10:11:22

區塊鏈塊鏈技術

2019-06-21 10:13:26

JavaScript錯誤開發

2009-08-27 11:12:04

C# foreach

2010-07-27 13:13:33

Flex數據綁定

2019-05-20 09:30:20

MySQL常見錯誤數據庫

2017-11-27 11:25:36

MySQL優化數據

2020-04-17 20:58:34

MySQLSQL優化

2025-06-12 03:55:00

項目處理異常代碼

2021-12-27 08:58:28

低代碼開發數據安全

2022-10-10 09:00:35

ReactJSX組件

2023-12-14 17:24:20

Linux開源項目

2019-11-21 10:40:54

MySQLMySQL優化MySQL索引

2020-11-05 18:53:15

JavaScript開發前端

2011-04-02 10:47:51

2010-04-19 13:56:19

Oracle數據庫服務

2023-11-30 09:00:00

TypeScript開發

2024-07-04 09:05:30

2020-07-09 11:35:05

SD-WAN網絡架構網絡技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费视频大全最热 | 亚洲成人精品在线 | 91豆花视频 | 欧美成人激情 | 一区二区在线 | 久热精品视频 | 成人中文网 | 精品国产久 | 成人免费视频观看视频 | 99精品福利视频 | 黄色一级视频 | 国产精品美女一区二区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 日韩一级免费大片 | 亚洲成人一区二区三区 | 国产美女自拍视频 | 欧美日韩综合精品 | 国产xxxx搡xxxxx搡麻豆 | 亚洲精品九九 | 激情久久av一区av二区av三区 | 日韩高清在线观看 | 免费成人高清在线视频 | av中文网 | 国产激情精品 | 拍真实国产伦偷精品 | 亚洲二区在线 | 亚洲视频国产视频 | 正在播放国产精品 | 日韩精品二区 | 国产91亚洲精品一区二区三区 | 国产精品久久二区 | 色悠悠久| 一区二区三区高清在线观看 | 97精品超碰一区二区三区 | 黄色欧美视频 | 国产高清视频一区 | 国产免费麻豆视频 | 国产精品色 | 一区二区三区不卡视频 | 日韩一区在线播放 | 国精产品一品二品国精在线观看 |