Упрощение типов машинописного текста внутри всплывающего окна типа

0

Вопрос

Можно ли упростить тип, отображаемый во всплывающей подсказке типа, которая отображается при наведении курсора мыши на переменную в Typescript?

У меня есть следующий код:

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;

Когда я нависаю над result переменная, которую я получаю: [hovering over result variable 1

Однако, когда я наведу курсор на type X Я вижу: hovering over a typeof result

Вопросы:

  1. Почему эти типы показаны по-разному? (Даже если они представляют одно и то же)
  2. Есть ли способ показать тип, как он показан на втором экране?

игровая площадка

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

Лучший ответ

1

Вы могли бы сделать что-то вроде:

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

По сути, это то же самое, что и то, что вы делаете, но более окольным путем.

Вместо того, чтобы полагаться на & параметр, который будет загрязнять подсказку при наведении курсора. Вы можете эффективно воссоздать весь объект с нуля.

Это достигается за счет использования k in K | keyof Acc как ключ, но это также означает, что вам нужен условный тип для значения.

Я полагаю, что это, возможно, менее эффективно, но, честно говоря, я не думаю, что это будет иметь наибольшее значение.

Игровая площадка

2021-11-24 03:11:45
0

Это основное различие между type ключевое слово и interface ключевое слово. Имена интерфейсов отображаются во всплывающих подсказках, но имена типов-нет.

2021-11-24 03:36:18
0

Похоже, можно создать тип утилиты, который будет выполнять выравнивание автоматически. Таким образом, нет необходимости анализировать тип, как это сделал @zecuria.

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 украден отсюда

2021-11-28 15:00:21

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории