Zjednodušenie strojom typy vnútri typ popup

0

Otázka

Je možné zjednodušiť typ, ktorý sa zobrazuje v typ-informačné okno, ktoré sa zobrazí, keď som sa vznášať sa nad premennej Strojom?

Mám nasledujúci kód:

type Debug<T> = {
    [key in keyof T]: T[key]
}

type Chainable<Acc = {}> = {
    option: <K extends string, V>(key: K, value: V) => Chainable<Acc & {[k in K]: V}>;
    get: () => Debug<Acc>;
}

declare const config: Chainable
const result = config
  .option('foo', 123)
  .option('name', 'type-challenges')
  .option('bar', { value: 'Hello World' })
  .get()


type X = typeof result;

Keď som sa vznášajú nad result variabilný som si: [hovering over result variable 1

Avšak, keď som sa vznášajú nad type X Vidím: hovering over a typeof result

Otázky:

  1. Prečo sú tieto typy uvedené inak? (Napriek tomu, že predstavujú isté)
  2. Existuje spôsob, ako ukázať typu, ako je to uvedené v druhom obrazovky?

detské ihrisko

types typescript
2021-11-23 22:28:22
3

Najlepšiu odpoveď

1

Mohli by ste urobiť niečo ako:

type Chainable<Acc = {}> = {
    option: <K extends string, V>(key: K, value: V) => Chainable<{[k in K | keyof Acc]: k extends keyof Acc ? Acc[k] : V}>;
    get: () => Debug<Acc>;
}

V podstate to je to isté ako to, čo robíte, ale vo viacerých okolo spôsobom.

Namiesto spoliehania sa na & parameter, ktorý sa znečisťujú hover pomôcku. Môžete účinne prerobiť celý objekt od nuly.

Toto je dosiahnuté pomocou k in K | keyof Acc ako kľúč, ale to tiež znamená, že budete potrebovať podmienené typ hodnoty.

Viem si predstaviť to možno menej výkonné, ale úprimne povedané, nemyslím si, že to bude mať najviac rozdiel.

Detské ihrisko

2021-11-24 03:11:45
0

To je hlavný rozdiel medzi type kľúčové slovo a interface kľúčové slovo. Rozhranie mená sú uvedené v popisoch, ale názvy typu nie.

2021-11-24 03:36:18
0

Zdá sa, že je možné vytvoriť pomôcku typ, ktorý bude robiť menej automaticky. Takže, nie je potrebné podrobne preskúmať typ cesty @zecuria urobil.

type Chainable<Acc = {}> = {
    option: <K extends string, V>(key: K, value: V) => Chainable<Acc & {[k in K]: V}>;
    get: () => Util_FlatType<Acc>;
}

type Util_FlatType<T> = T extends object ? { [K in keyof T]: Util_FlatType<T[K]> } : T

enter image description here

Util_FlatType je odcudzený tu

2021-11-28 15:00:21

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................