在TypeScript中,有没有什么方法可以在不知道Record
的键是什么的情况下声明变量是keyof
或Record
?
假设一个API响应返回一个JSON的有效载荷。我想为有效载荷的键定义一个类型,这样我就可以索引有效载荷,并且知道值不会是未定义的。这是可能的吗?或者我必须在每次索引有效载荷对象时简单地检查未定义吗?
示例:
const payload: Record<string, ValidValue> = await myApiCall()
const prop1 = 'a'
const prop2 = 'b'
if (isValidKey(prop1, payload)) {
const value1 = payload[prop1] // the type of `value1` should evaluate to `ValidValue`
}
const value2 = payload[prop2] // the type of `value2` should evaluate to `ValidValue | undefined`
2条答案
按热度按时间z3yyvxxp1#
我也使用了一个类型保护函数,但没有返回
key is keyof MyMap
,而是为Record<string, ValidValue | undefined>
的有效负载对象指定了一个类型,然后类型保护函数返回payload is Record<K, ValidValue>
,其中K
是键参数的类型。你可以在TSPlayground玩它。
nhhxz33t2#
我想我找到了解决办法。这在TS操场上似乎和预期的一样有效。
但是,有一件事我不明白:
value1
的计算结果是never
类型,但是没有TS错误,这是怎么回事?