Próbuję zdobyć typ wariantu obiektu Prop, ale nie wiem, jak tak głęboko zdobyć ten typ.

Przykład:

interface Foo {
    name: string;
    id: string;
}

interface Bar {
    [key: string]: Foo;
}

interface Baz {
    source: number;
}

// The effect I want to reach
// type Bat =  Foo & Baz;

// But not using `Foo` and `Baz`, but `Bar` and `Baz`
type Bat = (Something with `Bar`) & Baz;

Czy to jest możliwe?

0
Alexandre Gomes 17 październik 2020, 19:54

1 odpowiedź

Najlepsza odpowiedź

Ponieważ Bar jest zdefiniowany za pomocą podpisu indeksu string, możesz użyć dowolnego string (np.: "foo") lub sama string.

interface Foo {
  name: string;
  id: string;
}

interface Bar {
  [key: string]: Foo;
}

interface Baz {
  source: number;
}

type Bat = Bar[string] & Baz;

// Can also use an arbitary string, but this is less general
type BatAlernative = Bar["foo"] & Baz;

// Property 'source' is missing in type
const invalid: Bat = {
  name: "test",
  id: "42"
};

//  Property 'id' is missing in type
const invalid2: Bat = {
  name: "test",
  source: 3
};

const valid: Bat = {
  name: "test",
  id: "42",
  source: 3
};

Jest to podobne do odwoływania się do typów elementów w tablicy przy użyciu number.

type Arr = Array<boolean | string>;
type ElementTypes = Arr[number];

Jest to dobry przegląd przy użyciu podpisów indeksowych: HTTPS: //Basarat.gitbook. System IO / typuScript / Type / Signatury

1
skovy 17 październik 2020, 17:23