Tür açılır penceresinin içindeki typescript türlerini basitleştirme

0

Soru

Typescript'te bir değişkenin üzerine geldiğimde görünen type-tooltip'te gösterilen türü basitleştirmek mümkün mü?

Aşağıdaki kodum var:

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;

Üzerine geldiğimde result aldığım değişken: [hovering over result variable 1

Ancak, üzerine geldiğimde type X Anlıyorum: hovering over a typeof result

Sorular:

  1. Bu türler neden farklı gösteriliyor? (Aynı şeyi temsil etseler de)
  2. Türü ikinci ekranda gösterildiği gibi göstermenin bir yolu var mı?

bahçe

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

En iyi cevabı

1

Şöyle bir şey yapabilirsin:

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>;
}

Temel olarak bu, yaptığınız şeyle aynı şeyi yapıyor, ancak daha yuvarlak bir şekilde.

Güvenmek yerine & vurgulu ipucunu kirletecek parametre. Tüm nesneyi sıfırdan etkili bir şekilde yeniden oluşturabilirsiniz.

Bu kullanılarak elde edilir k in K | keyof Acc anahtar olarak, ancak aynı zamanda değer için koşullu bir türe ihtiyacınız olduğu anlamına gelir.

Bunun belki daha az performans gösterdiğini hayal ediyorum ama dürüst olmak gerekirse en fazla fark yaratacağını sanmıyorum.

Bahçe

2021-11-24 03:11:45
0

Bu, aşağıdakiler arasındaki temel farktır type anahtar kelime ve interface kelime. Arayüz isimleri ipuçlarını görünür ama yazın isim değil.

2021-11-24 03:36:18
0

Düzleştirmeyi otomatik olarak yapacak bir yardımcı program türü oluşturmak mümkün görünüyor. Bu nedenle, türü @zecuria'nın yaptığı gibi incelemeye gerek yoktur.

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 buradan çalındı

2021-11-28 15:00:21

Diğer dillerde

Bu sayfa diğer dillerde

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