TypeScript重映射对象的方法是什么?
我如何实现相同的功能,但保持其类型安全?
type FooBar = 'Foo' | 'Bar';
type Obj = { [key in FooBar]?: string[] }
const obj: Obj = {};
const newObj: Obj = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const value = ...
当前我看到打字稿错误:
元素隐式地具有'any'类型,因为类型的表达式'string'不能用于索引类型'Obj'。没有索引签名在类型“ Obj”上找到类型为“字符串”的参数。
我理解为什么key
是string
类型而不是并集,但不理解如何使用有效的打字稿实现相同的功能:
对象中的键是FooBar类型,这就是为什么您得到“在类型'Obj'上找不到参数类型为'string'的索引签名。”
为了使以上代码正常工作,您可以将密钥键入FooBar:
type FooBar = 'Foo' | 'Bar';
type Obj = { [key in FooBar]?: string[] }
const obj: Obj = {};
const newObj: Obj = {};
for (const key in obj) {
if (obj.hasOwnProperty(key as FooBar)) {
const value = ...