TS學習隨筆(六)->斷言


now,我們來看一看TS里面的斷言,聽起來很上檔次啊,其實看完你就發出驚嘆,這就是斷言啊

類型斷言

  類型斷言(Type Assertion)可以用來手動指定一個值的類型

  語法  

  <類型>值

 

   或者

  值 as 類型

  注意:在 tsx 語法(React 的 jsx 語法的 ts 版)中必須用后一種。

例子:將一個聯合類型的變量指定為一個更加具體的類型

  之前提到過,當 TypeScript 不確定一個聯合類型的變量到底是哪個類型的時候,我們只能訪問此聯合類型的所有類型里共有的屬性或方法:

 

function getLength(something: string | number): number {
    return something.length;
}

// index.ts(2,22): error TS2339: Property 'length' does not exist on type 'string | number'.
//   Property 'length' does not exist on type 'number'.

 

而有時候,我們確實需要在還不確定類型的時候就訪問其中一個類型的屬性或方法,比如:

function getLength(something: string | number): number {
    if (something.length) {
        return something.length;
    } else {
        return something.toString().length;
    }
}

// index.ts(2,19): error TS2339: Property 'length' does not exist on type 'string | number'.
//   Property 'length' does not exist on type 'number'.
// index.ts(3,26): error TS2339: Property 'length' does not exist on type 'string | number'.
//   Property 'length' does not exist on type 'number'.

上例中,獲取 something.length 的時候會報錯。

此時可以使用類型斷言,將 something 斷言成 string

function getLength(something: string | number): number {
    if ((<string>something).length) {
        return (<string>something).length;
    } else {
        return something.toString().length;
    }
}

類型斷言的用法如上,在需要斷言的變量前加上 <Type> 即可。

注意:類型斷言不是類型轉換,斷言成一個聯合類型中不存在的類型是不允許的

function toBoolean(something: string | number): boolean {
    return <boolean>something;
}

// index.ts(2,10): error TS2352: Type 'string | number' cannot be converted to type 'boolean'.
//   Type 'number' is not comparable to type 'boolean'.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM