在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ TypeScript 聯(lián)合類型的問題

TypeScript 聯(lián)合類型的問題

interface ModuleA{
    width: number;
    height: number;
}

interface ModuleB{
    width: number;
    offset: number;
}

function test(params: ModuleA | ModuleB): any{
    console.log(params.offset);
}

TypeScript 中聯(lián)合聲明,
像這種情況,會拋出錯(cuò)誤,大意就是ModuleA不存在offset的屬性。
請問該如何解決這個(gè)問題

回答
編輯回答
舊螢火

你的代碼中params可以是ModuleA或者ModuleB類型。 如果傳入一個(gè)ModuleA類型,那么就沒有params.offset這個(gè)屬性,所以不能通過檢查(這也是你使用TypeScript的意義所在),于是報(bào)錯(cuò),毫無疑問。


方案1:

可以看看User-Defined Type Guards

interface ModuleA{
    width: number;
    height: number;
}

interface ModuleB{
    width: number;
    offset: number;
}
function isModuleA(param: ModuleA | ModuleB): param is ModuleA {
    return (<ModuleA>param).height !== undefined;
}

function test(params: ModuleA | ModuleB): any{
    if(isModuleA(params)){
    console.log(params.height);
    }else{
    console.log(params.offset);
    }
}
const foo:ModuleA={width:3,height:0};
test(foo);

方案2

當(dāng)然你也可以給ModuleA添加一個(gè)可選的offset屬性。

2017年6月21日 22:31