Typescript实现具有相同键但类型不同的界面

时间:2019-06-06 12:54:27

标签: typescript

我有一个界面

export interface Foo {
 a: string;
 b: string;
}

我现在想拥有另一个实现接口的所有键的类,但可以具有另一种类型:

  export class Bar implements keysof(Foo) {
    a: SomeNewType;
    b: SomeNewType2;
  }

这可能是打字稿吗? 背景:我希望Bar类的键与Foo

同步

2 个答案:

答案 0 :(得分:1)

您可以使用按键映射来完成此操作。

export interface Foo {
  a: string;
  b: string;
}

type HasKeys<T> = {
  [P in keyof T]: any;
}

export class Bar implements HasKeys<Foo> {

}

这将抱怨Bar缺少ab,但是如果您使用任何类型定义它们都可以。即

export class Bar implements HasKeys<Foo> {
  a: number;
  b: object;
}

答案 1 :(得分:0)

您可以将Foo映射到消除属性类型限制的类型(使用any)并实现它:

export interface Foo {
  a: string;
  b: string;
}

type AnyFoo = { [P in keyof Foo]: any }

export class Bar implements AnyFoo {
  a: SomeNewType;
  b: SomeNewType2;
}