TypeScript:在运行时检查对象/缩小中的键

标签 typescript

我有以下(几乎)按预期工作的 JavaScript 代码:

const config = {
  a: 1,
  b: 2,
  default: 3
}

const getConfig = (key: string) => {
  return config[key] || config.default
}

但是,在 TypeScript 中当然会给我一个错误,因为不是任何类型的字符串都是 config 的有效索引。

但不幸的是,以下内容也不起作用:

const getConfig = (key: string) => {
  return key in config
    ? config[key]
    : config.default
}

参见TypeScript playground .

有没有办法构造某种 type predicate或者你会推荐什么?我真的必须进行config as any吗?这看起来很愚蠢...

最佳答案

您可以为配置对象指定类型 - { [key:string]: number }

const config: { [key:string]: number } = {
  a: 1,
  b: 2,
  default: 3
}

然后你可以通过string键从对象中获取任何值。

例如,您可以使此类型更通用一点

type Map<T> = {
  [key: string] : T
}

对于索引键,您也可以使用number

关于TypeScript:在运行时检查对象/缩小中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60951799/

相关文章:

javascript - 如何将 TypeScript import 语句转换为 JS Require 语句

javascript - 如何通过索引而不是名称映射 JSON 属性

typescript - Typescript 中的 Getter/Setter

javascript - Building Typescript : [! ] Error: Unexpected token (注意你需要插件来导入不是 JavaScript 的文件)

css - Ionic CSS 类分配

angular - 如何将一种类型的 Observable 转换为另一种类型的 Observable

javascript - typescript window.setInterval() 无法正常工作

html - AGM map 填充容器

typescript - 当 noUncheckedIndexedAccess 为 true 时,按长度缩小数组类型的类型安全方法

javascript - 如何在 Jasmine 单元测试中的 TypeScript 中获取 'Module' 的定义?