gpt4 book ai didi

javascript - 在 Typescript 中,使用公共(public)字符串字段作为键从 Array 构造 Map 时出错

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

Typescript 中的以下代码在最后一行给出了赋值错误

interface T {id: string}
let ts: Array<T> = []
let tMap: Map<string, T> =
new Map (
ts.map(t => [t.id, t])
)

javascript 环境中的类似代码有效。看不出我做错了什么

最佳答案

问题是 Map构造函数需要一个二元素数组 tuples ,但是 typescript does not infer tuple types from string literals .这意味着,以下内容:

const foo = [1, "two"]; 

被推断为数组类型Array<string | number>并且不是元组类型 [number, string] .如果你希望它是 [number, string]您可以使用显式类型注释,例如

const foo: [number, string] = [1, "two"];

type assertion喜欢

const foo = [1, "two"] as [number, string];

或者,如果您非常需要它,因为它可以让 TypeScript 达到 infer a tuple type from function arguments ,你可以像这样制作一个辅助函数:

const tuple = <T extends any[]>(...t: T) => t;

然后使用它:

const foo = tuple(1, "two"); // inferred as type [number, string]

其中任何一项都可以帮助您获得 [t.id, t]举止得体。让我们试试最后一个:

interface T { id: string }
let ts: Array<T> = []
let tMap: Map<string, T> =
new Map(
ts.map(t => tuple(t.id, t)) // okay 👍
);

希望对您有所帮助。祝你好运!

关于javascript - 在 Typescript 中,使用公共(public)字符串字段作为键从 Array<T> 构造 Map<string,T> 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136608/

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