限制 TypeScript 中的类型组合

Vid*_*dya 5 javascript typescript

我有两种类型:

type TypeLetter = "TypeA" | "TypeB"

type TypeNumber = "Type1" | "Type2"
Run Code Online (Sandbox Code Playgroud)

我想限制组合这些类型的值的方式,以便只有TypeAType1可以在一起,并且只有TypeBType2可以在一起。

我怎样才能创建一个类型Restricted来实现这样的事情呢?换句话说,在这些有效的情况下:

const valid1: Restricted = {
   valLetter: "TypeA" 
   valNumber: "Type1"
}

const valid2: Restricted = {
   valLetter: "TypeB" 
   valNumber: "Type2"
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

const nope: Restricted = {
   valLetter: "TypeB" 
   valNumber: "Type1"
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*x D 6

以下内容仅适用于这两个。您可以使用const类型。

type Restricted = {
    valLetter: 'TypeA',
    valNumber: 'Type1'
} | {
    valLetter: 'TypeB',
    valNumber: 'Type2'
};

const nope: Restricted = {
    valLetter: "TypeB",
    valNumber: "Type1"
} // Type '"Type1"' is not assignable to type '"Type2"'.
Run Code Online (Sandbox Code Playgroud)