检查某些道具是否改变,没有索引器

时间:2018-11-14 21:06:32

标签: typescript

我正在使用TS 2.4-

我有一个由接口定义的对象:

interface Foo {
   name: string,
   version: number,
   qux: boolean,
   baz: boolean
}

我不想在这里使用索引器。我现在想做一个.some来看看某些道具是否改变了。这些道具被定义为数组中的字符串。

const significantProps = ['name', 'version'];

const foo: Foo = {};
const prevFoo: Foo = {};
const shouldUpdate = significantProps.some((prop: string) => foo[prop] !== prevFoo[prop]);

但是这给了我错误:

  

[ts]元素隐式地具有“ any”类型,因为类型“ Foo”没有索引签名。 [7017]

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

将键数组重新定义为实际上是keyof Foo的数组:

const significantProps: (keyof Foo)[] = ['name', 'version'];

const foo: Foo = {} as any;
const prevFoo: Foo = {} as any;
const shouldUpdate = significantProps.some((prop) => foo[prop] !== prevFoo[prop]);