TS能识别出记录密钥可能未定义吗



如果我定义了一个类型:

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;
}

最新更新