簡體   English   中英

在TypeScript中鍵入Assertion而不指定新變量

[英]Type Assertion in TypeScript without assigning a new variable

我有一個函數,它使用兩個接口之一返回值,如下所示:

interface K {
    A:number;
    NUM:number;
}

interface L {
    A:string;
    STR:string;
}

function FUN():K|L { }

var x:K|L = FUN();

但我不能使用像這樣的類型保護訪問非共享屬性:

if(typeof x.A === 'string'){
    console.log(x.STR) // Property 'STR' does not exist on type 'K | L'
}

即使if子句確實區分了這兩種類型。 我知道我可以使用as運算符與變量賦值指示類型編譯器,像這樣:

if(typeof x.A === 'string'){
    var y = x as L;
    console.log(y.STR) // OK 
}

但這看起來有點kludgy,因為這會在生成的js代碼中添加一個不必要的var語句和賦值:

function FUN() { }
var x = FUN();
if (typeof x.A === 'string') {
    var y = x; // unnecessary...
    console.log(y.STR); 
}

如果沒有額外的var y=x;有沒有辦法在這種情況下指明類型var y=x; 在JS代碼中?

是的,TypeScript支持類型轉換。 你應該能夠做到:

if(typeof x.A === 'string'){
    console.log((<L>x).STR);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM