gpt4 book ai didi

typescript - 如何检查强类型对象是否包含 TypeScript 中的给定键而不提示?

转载 作者:行者123 更新时间:2023-12-04 00:23:17 26 4
gpt4 key购买 nike

拿这个代码:

const lookup = {
foo: 1,
bar: 2
}

const getValueOrDefault = (name: string, defaultValue: number) => {
if (name in lookup) {
return lookup[name] // ERROR
}

return defaultValue
}
lookup[name]表达式导致此 TS 错误( playground ):
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ foo: number; bar: number; }'.
No index signature with a parameter of type 'string' was found on type '{ foo: number; bar: number; }'.

...即使我做了 if (name in lookup)先检查一下。我试过 hasOwnProperty ,这也不起作用。

TypeScript 通常很聪明地在条件块中细化类型,但在这里不是。为什么?我怎样才能让它工作(而不仅仅是通过放松 lookup 的类型来破解它)?

最佳答案

您可以包装 name in lookup入住type guard帮助 typescript 理解一旦条件为真 - name有效 lookup的关键:

const getValueOrFalse = (name: string) => {
if (isObjKey(name, lookup)) {
// name narrowed to "foo" | "bar"
return lookup[name]
}

return false
}

function isObjKey<T>(key: any, obj: T): key is keyof T {
return key in obj;
}

Playground

关于typescript - 如何检查强类型对象是否包含 TypeScript 中的给定键而不提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com