简化稿类型的内部类型的弹出窗口

0

的问题

是否有可能简化的类型,正在显示在类-提示也就是可见的,当我悬停在一个变量的稿?

我有下列代码:

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ý
..................................................................................................................