【问题标题】:How to access custom type value in Typescript如何在 Typescript 中访问自定义类型值
【发布时间】:2021-12-25 10:48:13
【问题描述】:

我是打字稿新手,找不到答案,所以我想问一下如何访问自定义类型值?

假设我有这样的自定义类型

type Notes = {
  5: number;
  10: number;
  20: number;
}

我创建这样的实例

const availableNotes: Notes = {
  5: 10,
  10: 20,
  20: 40,
};

我尝试像这样访问availableNotes 的值

const noteTypes: string[] = Object.keys(availableNotes);

for(let i = 0; i < noteTypes.length; i++) {
  const value = availableNotes[noteTypes[i]] 
  ... // Some logic
}

这是一个错误

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ '5': number; '10': number; '20': number; }'.
  No index signature with a parameter of type 'string' was found on type '{ '5': number; '10': number; '20': number; }'

感谢您的帮助!

【问题讨论】:

标签: typescript


【解决方案1】:

所以,我花了一些时间尝试不同的灵魂,我发现了一个非常丑陋的灵魂,但它有效。

整个魔法是将密钥的类型转换为keyof Notes。首先,我们需要将noteTypes[i] 转换为unknown,因为TypeScript 遵循将string (noteTypes[i]) 直接转换为keyof Notes

工作示例(在 TypeScript v4.4.4 和 v3.3.3 上测试):

type Notes = {
  5: number;
  10: number;
  20: number;
}

const availableNotes: Notes = {
  5: 10,
  10: 20,
  20: 40,
};

const noteTypes = Object.keys(availableNotes);

for(let i = 0; i < noteTypes.length; i++) {
  const key = noteTypes[i] as unknown as (keyof Notes);
  const value = availableNotes[key];
  console.log(value);
}

【讨论】:

  • 像魅力一样工作。谢谢阿德里安。
猜你喜欢
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2017-04-13
  • 2020-04-26
  • 2020-01-23
  • 2018-02-23
相关资源
最近更新 更多