如何将typescript定义的字符串类型转换为字符串数组



我正在尝试从构造中的变量获取所有定义的类型。

export interface TestType {
resultType?: 'NUMBER' | 'STRING' | 'DATE' | 'ENUM' | 'AMOUNT' ;
}

我期待着这样的结果。

const types: string[] = ['NUMBER', 'STRING', 'DATE', 'ENUM', 'AMOUNT'];

构造函数可能具有实现这一点的功能或能力。何时无法更改控制器?

我尝试将其自动化,这样它基本上可以提取所有类型,并且我可以让它们进行选择。

这只是一个不可能的例子。

或者类似解决方案的想法?

实际我目前在v4.0.5 中使用Typescript

谢谢。

如果您想要的是类似于迭代变量的可能值的东西。类型需要在typescript中以静态的最终方式引用。

export class TestClass{
types = ['NUMBER', 'STRING', 'DATE', 'ENUM', 'AMOUNT'] as const;
resultType: TestClass["types"][number];
}

在上面的示例中,resultType的可接受值是类型数组的成员。因此将触发类型验证。

由于这些类型在运行时不存在,因此无法直接生成字符串。您可以创建一些帮助程序,以确保您只使用正确的键。

type Types = 'foo'|'bar'|'baz';
type TypeHolder<T extends string> = { [Key in T]: number; }
function getKeys<T extends string>(types: TypeHolder<T>) {
return Object.keys(types);
}
console.log(getKeys<Types>({ foo: 1, bar: 1, baz: 1 }));  // ['foo', 'bar', 'baz']

嗯,不是很好。换一种方式可能会容易得多:

const types = ['foo', 'bar', 'baz'] as const;
type Types = typeof types[number];   // 'foo'|'bar'|'baz'

最新更新