typescript - Er det mulig å generere streng type fra delvis type?


Vi kan generere delvis type fra streng type som vist under (fra TypeScript 2.1):

type Partial<T> = {
    [P in keyof T]?: T[P];
};
type Person = { name: string, age: number } 
type PersonPartial = Partial<Person>; // === { name?: string, age?: number }

Omvendt, er det mulig å generere streng type fra delvis type?

type Strict<T> = { ??? };

type Person = { name: string; age?: number; }
type PersonStrict = Strict<Person>; // === { name: string, age: number }

Hva jeg egentlig ønsker

Jeg trenger de to typene nedenfor, men vil ikke skrive dem to ganger.

type Person = { name: string, age?: number, /* and other props */ }
type PersonStrict = { name: string, age: number, /* and other props */ }

Jeg fant en ordentlig lang løsning som nedenfor, men jeg vil vite om det finnes en bedre måte eller ikke.

type RequiredProps = { name: string, /* and other required props */ };
type OptionalProps = { age: number, /* and other optional props */ };
type Person = RequiredProps & Partial<OptionalProps>;
type PersonStrict = RequiredProps & OptionalProps;

Svar #1

Bruk påkrevd type.

type Person = { name: string; age?: number; }
type RequiredPerson = Required<Person>; // === { name: string, age: number }

Svar #2

Jeg fant måten å gjøre dette på.

type Person = { name: string, age?: number };
type Strict<T> = { [K in (keyof T)]: T[K] };
type PersonStrict = Strict<Person>;

Parenteser knyttet til keyof T er obligatoriske.

Uten disse parentesene er age fortsatt valgfritt.

Relaterte artikler