gpt4 book ai didi

typescript - 对自定义 typescript 类型的反省

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:39 24 4
gpt4 key购买 nike

我在 typescript 中定义了一个自定义类型

type MyType = 'left' | 'right';

如何检查与此类型匹配的变量?我如何迭代这种类型的可能值? (例如创建相应的选择元素)

最佳答案

在运行时添加类型信息是声明 non-goal typescript 。这意味着他们不想让您定义一个类型然后在运行时检查它。

然而,反过来也很好:创建一个在运行时存在的对象,然后使用 TypeScript 推断有关它的类型信息。这是针对您的情况的一种方法。

首先,添加以下辅助函数:

function stringLiteralArray<T extends string>(...args: T[]): T[] {
return args;
}

这有助于 TypeScript 推断字符串文字数组,而不仅仅是 string[]

现在您可以创建一个名为myType 的运行时对象,并从中派生MyType:

const myType = stringLiteralArray('left', 'right'); // ('left'|'right')[]
type MyType = (typeof myType)[number]; // 'left' | 'right'

然后您将获得运行时和编译时类型信息。您可以使用以下用户定义的类型保护来检查变量是否属于该类型:

function isMyType(x: any): x is MyType {
return myType.includes(x); // needs es2016 at least, or implement yourself
}

你可以在运行时迭代myType,你可以做exhaustiveness checking编译时在 MyType 上:

function foo(x: MyType): string { // error, not exhaustive
switch (x) {
case 'left': return 'L';
case 'rihgt': return 'R'; // error, 'rihgt' isn't 'left'|'right'
}
}

希望对您有所帮助。

关于typescript - 对自定义 typescript 类型的反省,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547900/

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