[英]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.