我有以下(几乎)按预期工作的 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
}
有没有办法构造某种 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/