将打字稿别名转换为具有联合类型的接口

时间:2019-01-08 07:41:37

标签: typescript

如何将此type alias转换为界面?

type Color = 'RED' | 'GREEN' | 'BLACK';
const color: Color = 'RED';

我的直觉是要使用,但这是错误的。

interface Color {
  [item: 'RED' | 'GREEN' | 'BLACK']: string;
}
const color: Color = 'RED'

我想要做的是用接口替换类型。 因此,基本上该接口类型的变量只能分配以下值之一:“ RED”,“ GREEN”或“ BLUE”

2 个答案:

答案 0 :(得分:0)

类型别名和interafecs不能互换。

有时候,如果可以将类型别名解析为简单的对象类型,则两者在它们的处理上非常接近。

如果类型别名是联合,则不能将其更改为接口

答案 1 :(得分:0)

您可以使用generic interface Union Type 转换为 Interface

这是类型联合:


type Color = 'RED' | 'GREEN' | 'BLACK';
const color: Color = 'RED';

将其转换为接口:


interface Color<Label1="RED", Label2="GREEN", Label3="BLACK"> {
    name: Label1 | Label2 | Label3
}

const color: Color = { name: "RED" } // ok, static checked 


尽管根据您的特殊用例,您还是希望仅使用enum。像这样:


enum Color {
    RED = 'RED',
    GREEN = 'GREEN',
    BLACK = 'BLACK'
}

const color: Color = Color.RED // ok, static checked ---> color = 'RED'