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

时间:2021-05-31 13:12:22

标签: angular typescript

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

List<Long>

我期待这样的结果。

text

可能有一个函数或能力可以从构造函数中实现这一点。当委托人不能更改时?

我尝试使其自动化,以便它基本上提取所有类型,并且我能够让它们进行选择。

Here 只是一个例子,说明这是不可能的。

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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

在上面的例子中,resultType 的接受值是 types 数组的成员。所以类型验证会触发。

答案 1 :(得分:0)

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

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'