Hur skriver man ut alla typer av egenskaper hos en typ i TypeScript?


Jag skulle vilja skriva ut alla typer av egenskaper för en typ i TypeScript. Till exempel vill jag logga vilka egenskaper AddressWithUnit har och typerna på egenskaperna. I koden nedan kan det vara enkelt att kontrollera det manuellt. Men om en typ kombineras med flera typer kan det vara komplicerat att kontrollera det manuellt.

type BasicAddress = {
  name?: string;
  street: string;
  city: string;
  country: string;
  postalCode: string;
}

interface AddressWithUnit extends BasicAddress {
  unit: string;
}

Svar #1

Hur skulle jag kontrollera det vid kompileringstid då? Så länge jag kan kolla typerna, skulle det vara bra för mig.

(Svarar med detta ditt kommentarsinlägg i åtanke)

Jag är inte säker på vad ditt exakta krav är här, men låt oss anta att du vill säkerställa att alla värden är av typen string eller number eller undefined. Så du kan göra något som detta...

type BasicAddress = {
  name?: string;
  street: string;
  city: string;
  country: string;
  postalCode: string;
}

interface AddressWithUnit extends BasicAddress {
  unit: string;
}
type TestAddressWithUnit = TestTrue<
  Value<AddressWithUnit> extends string | number | undefined
    ? true
    : false
>;

type Value<T> = T[keyof T]
type TestTrue<T extends true> = T;

Nu, om du av misstag gör unit till en boolean i definitionen av AddressWithUnit, kommer inte koden att kompileras och du får ett fel vid TestAddressWithUnit som följer

Nu kan någon som jag till och med göra metaprogrammering, jag kan skriva kod som ger mig fel på naturligt språk... Ursäkta att jag skryter :P