以下是我的原始代码
interface customerInfo {
Success: boolean;
Code: string;
Message: string;
Result: {
name: string
tel: number
}
}
interface accountInfo {
Success: boolean;
Code: string;
Message: string;
Result: {
xxx: number
vvv: string
}
}
如何为此代码使用extends?
interface outer {
Success: boolean;
Code: string;
Message: string;
Result: Object;
}
interface customerInfo extends outer.Result {
name: string
tel: number
}
interface accountInfo extends outer.Result {
xxx: number
vvv: string
}
上面的代码是否正确? 接口customerInfo和accountInfo的内容在结果Object下。
答案 0 :(得分:0)
您可以使outer
通用,类型参数将是结果类型:
interface outer<T> {
Success: boolean;
Code: string;
Message: string;
Result: T;
}
interface customerInfo extends outer<{
name: string
tel: number
}> {
//Other members
}
interface accountInfo extends outer<{
xxx: number
vvv: string
}>{
//Other members
}
在上面的类型中,type参数是内联接口声明,但是如果要重用它,最好使用命名接口。例如:
interface customerInfoResult {
name: string
tel: number
}
interface customerInfo extends outer<customerInfoResult> {
//Other members
}
答案 1 :(得分:0)
最简单的事情就是使用新的outer
类型扩展Result
:
interface customerInfo extends outer {
Result: {
name: string
tel: number
}
}
如果您尝试将另一个对象分配到Result
中的customerInfo
,则会抱怨。
但是,你真的想这样做吗?您的所有回复都是Code
,Message
和Result
,无论这些回复是成功还是失败?
更容易定义customerInfo
和accountInfo
,然后将它们包含在outer
界面中,该界面本身经过修改以区分成功和失败案例:
interface customerInfo {
name: string
tel: number
}
interface outerSuccess {
Success: true;
Result: customerInfo | accountInfo;
}
interface outerFail {
Success: false;
Code: string;
Message: string;
}
type outer = outerSuccess | outerFail;
现在使用它时:
if (response.Success) { ... can access Result here ... }
else { ... can access Code and Message here ... }
P.S。 tel: number
?也应该是一个字符串。