首页 > 解决方案 > 限制 TypeScript 中的类型组合

问题描述

我有两种类型:

type TypeLetter = "TypeA" | "TypeB"

type TypeNumber = "Type1" | "Type2"

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

我怎样才能创建一个类型Restricted来让这样的事情发生?换句话说,这些是有效的:

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

const valid2: Restricted = {
   valLetter: "TypeB" 
   valNumber: "Type2"
}

但这不是:

const nope: Restricted = {
   valLetter: "TypeB" 
   valNumber: "Type1"
}

标签: javascripttypescript

解决方案


以下内容仅适用于这两个。您可以使用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"'.

推荐阅读