如何在打字稿中重新映射对象?

问题描述 投票:0回答:1

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 = ...

Playground Link

当前我看到打字稿错误:

元素隐式地具有'any'类型,因为类型的表达式'string'不能用于索引类型'Obj'。没有索引签名在类型“ Obj”上找到类型为“字符串”的参数。

我理解为什么keystring类型而不是并集,但不理解如何使用有效的打字稿实现相同的功能:

typescript
1个回答
0
投票

对象中的键是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 = ...

Your same Playground example with typecast

© www.soinside.com 2019 - 2024. All rights reserved.