我创建了基于我的界面的这种类型:
interface Base {
prop1: any;
}
interface A extends Base {
propA: string;
}
interface B extends Base {
propB: string;
}
还有一个函数,该函数应该返回我的任何接口类型
public getObject<T extends Base>(id): T {
return {
prop1: id, //prop on Base type
propA: '2'//prop on type A
}
}
我的getObject
抛出错误Type '{ prop1: any; propA: string; }' is not assignable to type 'T'. 'T' could be instantiated with an arbitrary type which could be unrelated to '{ prop1: any; propA: string; }'.
该如何解决?
更新:
如果我将功能更改为可以正常工作
public getObject(id): A | B {
return {
prop1: id, //prop on Base type
propA: '2'//prop on type A
}
}
但这意味着如果我添加更多扩展Base
的接口,我必须将每个新的接口类型添加到getObject(id): A | B | ....
返回中,这很奇怪
答案 0 :(得分:-1)
我认为您希望实现以下情况,在这种情况下,您可以拥有一个由其他类扩展的基类,并且您具有一个根据某种条件返回多个扩展类之一的函数。
interface BaseClass {
name?: string;
}
interface Class1 extends BaseClass {
age: string;
}
interface Class2 extends BaseClass {
address: string;
}
function getBase<T>(name: string): T {
return {
name,
age: '32',
address: 'Himalaya'
} as unknown as T;
}
console.log(getBase<Class1>('Ricky').name);
console.log(getBase<Class1>('Ricky').age);
console.log(getBase<Class2>('Ricky').name);
console.log(getBase<Class2>('Ricky').address);