如果我定义了一个类型:
type MyType = Record<string, SubType>;
const myObject = { key: value };
然后,每次访问myObject
上的属性时,TypeScript都假定该类型为SubType
。很明显,情况并非如此,因为任何对象都不可能有EVERY可能键的值。这会导致未捕获的未定义值。
我的问题是:
如果键不存在,是否有最佳方法确保TypeScript识别出值可能未定义
我知道你可以指定密钥
type MyKeys = 'key';
type MyType = Record<MyKeys, SubType>;
(这并不总是可能的,因为在某些情况下,它们只在运行时设置(,或者我可以创建自己的泛型,专门说明值可能是undefined
,但感觉要么TypeScript应该为使用string
键控的对象自动执行此操作,要么有其他内置的方法来执行此操作。
如果您将nodejs与@types/node
一起使用,有一种类型NodeJS.Dict<T>
支持undefined,但我找不到任何关于它的示例用法,也许NodeJS
命名空间不适合直接使用。
无论如何,您可以简单地定义自己的实用程序类型,它也可以在nodejs之外使用。
interface Dict<T> {
[key: string]: T | undefined;
}