typescript 扩展类型但不部分扩展

zf9nrax1  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(137)

我如何定义一个类型,它要么有额外的属性块(在isLocked之上),要么根本没有它们?Partial保证所有额外的属性都是可选的。我希望它们都是必需的,或者根本不存在。

type AccountMetadata = {
  roles: string[];
  name: string;
}

type Account = {
  isLocked: boolean;
} & (AccountMetadata | {})

type Account = {
  isLocked: boolean;
} & (AccountMetadata | never)

预期结果

{ isLocked: boolean; roles: string[]; name: string } | { isLocked: boolean }
ql3eal8s

ql3eal8s1#

不完全是类型扩展,但你可以这样做:

type AccountMetadata = {
  roles: string[];
  name: string;
}

type Account<T extends AccountMetadata> = {
  isLocked: boolean;
  metadata?: T
}

var example1: Account<AccountMetadata> = {isLocked : true}; // ok
var example2: Account<AccountMetadata> = {isLocked : true, metadata: {name: ''}}; // error, metadata missing roles property

相关问题