gpt4 book ai didi

TypeScript array.map 允许具有 interred 返回类型的附加属性

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:42 27 4
gpt4 key购买 nike

我将从 JSON 加载的对象数组映射到已知类型的对象中。我使用了标准的 array.map,但我能够在没有编译器错误的情况下指定其他属性。但是如果我在 map 函数中显式指定返回值类型,编译器会禁止附加属性。

interface Foo {
name: string
}

const input: any[] = [{ name: 'Jen' }]

// Compiles. But 'extra' is not in Foo and Foo[] is the specified return type.
const mapped1: Foo[] = input.map((item) => ({
name: item.name,
extra: true
}))

// Does not compile. But this is excessively verbose.
const mapped2: Foo[] = input.map((item) => {
const output: Foo = {
name: item.name,
extra: true
}
return output
})

有人可以解释为什么编译器不提示第一个而不是第二个吗?还有另一种方法吗?谢谢!

最佳答案

TypeScript 是一种结构类型语言,这意味着除了具有文字对象的非常特殊的情况外,额外的属性不会被视为类型错误。其原因可以在 related issue 中找到。 .

还有另一种写法,虽然不那么冗长,但仍能满足您的需求。这个想法是为映射函数添加一个显式返回类型,以便触发文字对象大小写。在这种情况下,您也不需要对结果进行注释:

const mapped3 = input.map((item): Foo => ({
name: item.name,
extra: true
}))

关于TypeScript array.map 允许具有 interred 返回类型的附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com