除了一些外,如何推广所有对象属性?

时间:2017-10-07 17:55:55

标签: typescript types typescript2.0

我希望所有属性都具有某种类型,但我希望显式声明的属性覆盖它:

interface Potato {
  a: number
  [all:string]: string
}

1 个答案:

答案 0 :(得分:1)

您可以使用intersection types

来实现这一目标
type PotatoAll = { [all: string]: string };
type Potato = PotatoAll & { a: number };

let p = {} as Potato;

p['foo'] = 'foo';
p.a = 1;
p['a'] = 1;

p['foo'] = 1; //error
p['a'] = 'a'; //error
p.a = 'a'; //error