考虑这段代码:
interface MyInterface {
foo: string
bar: string
baz: string
}
const myObj: MyInterface = {
foo: "foo",
bar: "bar",
baz: "baz"
};
Object.keys(myObj).forEach(obj => {
obj = myObj[obj];
});
启用严格模式时出现此错误:TS7017:元素隐式具有“任何”类型,因为类型“MyInterface”没有索引签名。
最简单的解决方案似乎是:
interface MyInterface {
[key: string]: string;
foo: string
bar: string
baz: string
}
但是,这会为 MyInterface-objects 中的任何字符串属性打开。
然后我正在考虑使用映射类型:
type ValidEnteries = "foo" | "bar" | "baz";
type Alternative = {
[key in ValidEnteries]: string
}
虽然这对我来说似乎是正确的,但原始问题返回时缺少索引签名。
有没有办法既拥有索引签名,又将对象限制为一定数量的属性?