有没有办法强制两种类型具有相同的键?

ABO*_*BOS 4 typescript

例如,我希望以下两种类型 - ViewModel 和 SaveModel 具有相同的键但不同的值类型,

type User = {
  id: number;
  name: string; 
  age: number;
}

type Address = {
  street: string; 
  zip: string;
}

type ViewModel = {
  user: User;
  address: Address;
}

type SaveModel = {
  user: number;
  address: string;
}
Run Code Online (Sandbox Code Playgroud)

如何在打字稿中做到这一点?

Tit*_*mir 8

由于 ViewModel 中的属性类型和 SaveModel 中的属性类型之间似乎没有任何关系,因此您可以创建一个类型来限制第二种类型具有相同的键:


type MustHaveKeys<V, S extends Record<keyof V, any>> = S;

type SaveModel = MustHaveKeys<ViewModel, {
  user: number;
  address: string;
}>
type SaveModelBad = MustHaveKeys<ViewModel, {
  //user: number;
  address: string;
}>

Run Code Online (Sandbox Code Playgroud)

游乐场链接