我在打字稿中定义了一个自定义类型
type MyType = 'left' | 'right';
Run Code Online (Sandbox Code Playgroud)
如何检查变量是否与该类型匹配?如何迭代该类型的可能值?(例如创建相应的选择元素)
在运行时添加类型信息是 TypeScript 明确的非目标。这意味着他们不想允许您定义类型然后在运行时检查它。
然而,反之亦然:创建一个运行时存在的对象,并使用 TypeScript 推断有关它的类型信息。这是针对您的情况的一种方法。
首先,添加以下辅助函数:
function stringLiteralArray<T extends string>(...args: T[]): T[] {
return args;
}
Run Code Online (Sandbox Code Playgroud)
这有助于 TypeScript 推断字符串文字数组,而不仅仅是string[].
现在您可以创建一个名为 的运行时对象myType,并MyType从中派生:
const myType = stringLiteralArray('left', 'right'); // ('left'|'right')[]
type MyType = (typeof myType)[number]; // 'left' | 'right'
Run Code Online (Sandbox Code Playgroud)
然后你就有了运行时和编译时类型信息。您可以使用以下用户定义的类型保护检查变量是否属于该类型:
function isMyType(x: any): x is MyType {
return myType.includes(x); // needs es2016 at least, or implement yourself
}
Run Code Online (Sandbox Code Playgroud)
您可以myType在运行时进行迭代,并且可以在编译时进行详尽检查: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'
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
这是不可能的。
你必须编写和使用这样的东西:
type MyType = 'left' | 'right';
const MyTypeMeta = ["left", "right"];
Run Code Online (Sandbox Code Playgroud)
这里有一个关于这个主题的旧讨论,有很多相关的问题。也许是对这条消息的希望,但目前还没有完成。
| 归档时间: |
|
| 查看次数: |
5871 次 |
| 最近记录: |