最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

那些項目中常見的TypeScript錯誤總結(jié)

 更新時間:2022年03月18日 09:47:02   作者:方章河?翻譯  
這篇文章主要給大家總結(jié)介紹了一些項目中常見的TypeScript錯誤的相關(guān)資料,如果你想查看所有的錯誤信息和錯誤碼,可以瀏覽TypeScript的源代碼倉庫,當(dāng)然隨著?ts?版本的更新,官網(wǎng)也會逐漸增加更多新的類型錯誤,需要的朋友可以參考下

引言

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

1.TS2456

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

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

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

2.TS2554

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

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'.    ;

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

6.TS2322

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

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。

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

總結(jié)

到此這篇關(guān)于常見的TypeScript錯誤總結(jié)的文章就介紹到這了,更多相關(guān)常見的TypeScript錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript制作樓層導(dǎo)航效果流程詳解

    JavaScript制作樓層導(dǎo)航效果流程詳解

    項目中遇到比較多的的文檔內(nèi)容,為了方便查找里面的小內(nèi)容,一般都會在左側(cè)或者右側(cè)放一個固定樓層的導(dǎo)航欄,今天就來說一下這個固定樓層導(dǎo)航欄的思路以及實現(xiàn)的方法
    2021-10-10
  • javascript 對象的定義方法

    javascript 對象的定義方法

    javascript 對象的定義方法...
    2007-01-01
  • js跳轉(zhuǎn)到指定url的方法與實際使用

    js跳轉(zhuǎn)到指定url的方法與實際使用

    這篇文章主要給大家介紹了關(guān)于js跳轉(zhuǎn)到指定url的方法與實際使用的相關(guān)資料,要實現(xiàn)JavaScript跳轉(zhuǎn)到指定URL,可以使用window.location對象來實現(xiàn),需要的朋友可以參考下
    2023-09-09
  • JavaScript 有用的代碼片段和 trick

    JavaScript 有用的代碼片段和 trick

    這篇文章主要介紹了JavaScript 有用的代碼片段和 trick的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • ionic隱藏tabs的方法

    ionic隱藏tabs的方法

    這篇文章主要為大家詳細介紹了ionic隱藏tabs的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Bootstrap Table從服務(wù)器加載數(shù)據(jù)進行顯示的實現(xiàn)方法

    Bootstrap Table從服務(wù)器加載數(shù)據(jù)進行顯示的實現(xiàn)方法

    Bootstrap-Table是一個Boostrap的表格插件,能夠?qū)SON數(shù)據(jù)直接顯示在表格中。接下來通過本文給大家分享Bootstrap Table從服務(wù)器加載數(shù)據(jù)進行顯示的實現(xiàn)方法,感興趣的朋友一起看看吧
    2016-09-09
  • 輕松實現(xiàn)js選項卡切換效果

    輕松實現(xiàn)js選項卡切換效果

    這篇文章主要幫助大家輕松實現(xiàn)js選項卡切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 一文了解ES5和ES6的區(qū)別

    一文了解ES5和ES6的區(qū)別

    ES6是JavaScript語言的主要增強,允許我們編寫程序,ES6適用于復(fù)雜的應(yīng)用程序,盡管ES5和ES6在本質(zhì)上有一些相似之處,但它們之間也有許多不同之處,下面這篇文章主要給大家介紹了關(guān)于ES5和ES6區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • JavaScript制作windows經(jīng)典掃雷小游戲

    JavaScript制作windows經(jīng)典掃雷小游戲

    掃雷是一款相當(dāng)大眾的小游戲,游戲目標(biāo)是在最短的時間內(nèi)根據(jù)點擊格子出現(xiàn)的數(shù)字找出所有非雷格子,同時避免踩雷。今天我們來看看如何使用javascript來實現(xiàn)這款小游戲
    2015-03-03
  • vue雙向綁定簡要分析

    vue雙向綁定簡要分析

    這篇文章主要介紹了vue雙向綁定的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

根河市| 阜阳市| 九台市| 大石桥市| 盐山县| 监利县| 岫岩| 商南县| 嘉荫县| 新化县| 沾益县| 疏附县| 河间市| 原平市| 驻马店市| 博湖县| 涪陵区| 临夏县| 龙口市| 鄯善县| 丰台区| 安岳县| 永兴县| 商丘市| 平陆县| 武宁县| 新田县| 辉南县| 新郑市| 江口县| 达州市| 东兴市| 永城市| 灵台县| 高邮市| 略阳县| 扶绥县| 兴安县| 罗城| 普安县| 巴林右旗|