类型“ {....}”不可分配给类型“ T”

时间:2020-10-30 05:27:20

标签: typescript types

我创建了基于我的界面的这种类型:

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 | ....返回中,这很奇怪

1 个答案:

答案 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);