【问题标题】:How to list types/values from a TS interface/type?如何从 TS 接口/类型列出类型/值?
【发布时间】:2021-08-06 23:58:05
【问题描述】:

有一种方法可以列出接口/类型中的有效值吗?给定:

interface IFoo {
    foo1: "a" | "b" | "c";
    foo2: string;
    foo3: "foo" | number;
}

可能的回应:

{
    foo1: ["a", "b", "c"],
    foo2: String,
    foo3: ["foo", Number],
}

我认为仅使用 TS 是不可能的,有什么想法吗?

【问题讨论】:

    标签: typescript interface


    【解决方案1】:

    没有。

    类型仅在编译时存在,并且在您的代码运行时消失。所以没有任何东西可以用来构建该对象。

    事实上,您的示例输出不能分配给您的界面。如果类型是Array<"a" | "b" | "c"> 怎么办?那么输出是什么?

    对于更复杂的类型,其中值是类或函数或泛型的实例,编译器不可能猜出你真正想要什么。

    您根本无法用单个值来表达类型的丰富性。


    不过,你可以走另一条路:

    const foo = {
        foo1: ["a", "b", "c"],
        foo2: 'd',
        foo3: ["foo", 123],
    } as const
    
    type IFoo = typeof foo
    

    Playground

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 2020-09-04
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2010-12-08
      • 2016-05-29
      • 1970-01-01
      相关资源
      最近更新 更多