types - TypeScript'te bir dizinin, bir string birleşiminin tüm öğelerini içerdiğinden emin olun


Bir dizi birleşimi verildiğinde

type UnionOfStrings = "zzz" | "yyy";

Bir dizi nesnedeki her dize için bir girişin olduğundan nasıl emin olunur?

interface Obj {
  a: string;
  b: UnionOfStrings;
}

const arrayOfObjects: Obj[] = [
  {
    a: "",
    b: "zzz",
  },
];
// Error: missing entry for `b: "yyy"`

Cevap #1

Bunu bir nesne dizisi ile yapamazsınız. Bir nesneyi bir diziye koyar koymaz, nesnenin bir birleşimin hangi üyesini içerdiğine dair tür bilgisi kaybolur. Bunu belki demetlerle yapabilirsiniz - ama emin değilim.

Ancak türü şu şekilde yazabilirsiniz

type UnionOfStrings = "zzz" | "yyy";
type MapOfObjects = { [k in UnionOfStrings]: { a: string, b: k } }

const arrayOfObjects: MapOfObjects = {
  zzz: {
    a: "",
    b: "zzz",
  },
}

aşağıdaki hataya sahiptir Türü '{ zzz: { a: string; b: "zzz"; }; }' içinde 'yyy' özelliği eksik ancak 'MapOfObjects' türünde gerekli.(2741)

İlgili makaleler