我正在使用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]
有没有办法做到这一点?
答案 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]);