Ric*_*cha 3 javascript arrays dictionary typescript
我试图将以下数组转换为地图:
const arr = [
{ key: 'user1', value: { num: 0, letter: 'a' } },
{ key: 'user2', value: { num: 0, letter: 'b' } },
{ key: 'user3', value: { num: 0, letter: 'c' } },
];
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
const arr = [
{ key: 'user1', value: { num: 0, letter: 'a' } },
{ key: 'user2', value: { num: 0, letter: 'b' } },
{ key: 'user3', value: { num: 0, letter: 'c' } },
];
const b = arr.map(obj => [obj.key, obj.value]);
const map = new Map<string, { num: number; letter: string }>(b);
console.log(map.get('user1'));
Run Code Online (Sandbox Code Playgroud)
你知道这是否可以实现吗?
PS:你可以在这里找到 Typescript Playground以及我遇到的错误
obj.key是 a string,并且obj.value是 a {num: number, letter: string},所以如果你创建它们的数组 ( [obj.key, obj.value]),那么你会得到一个Array<string | {num: number, letter: string}>。
您需要告诉 TypeScript 您正在创建一个特定的tuple,正如 Map 构造函数所期望的那样,而不是一个通用数组。有几种方法可以做到这一点:
// The simplest: Tell TypeScript "I mean exactly what I said."
// (This makes it readonly, which isn't always desirable.)
const b = arr.map(obj => [obj.key, obj.value] as const);
// Or be explicit in a return type. You can do this at a few levels.
const b = arr.map<[string, { num: number, letter: string}]>(obj => [obj.key, obj.value]);
const b = arr.map((obj): [string, { num: number, letter: string}] => [obj.key, obj.value]);
// Or, as explained in the comments, do it in one line, and TypeScript
// can infer tuple vs. array itself.
const map = new Map(arr.map(obj => [obj.key, obj.value]));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7058 次 |
| 最近记录: |