【问题标题】:How get convert typescript defined types of strings to array of strings如何将打字稿定义的字符串类型转换为字符串数组
【发布时间】:2021-05-31 22:11:31
【问题描述】:

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

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

我期待这样的结果。

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

可能有一个功能或能力可以从构造函数中实现这一点。什么时候委托人不能变更?

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

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

或类似解决方案的想法?

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

谢谢。

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      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'
      

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 2019-11-12
        • 1970-01-01
        • 2020-08-15
        • 1970-01-01
        相关资源
        最近更新 更多