相关疑难解决方法(0)

如何查看 Typescript 类型的完整扩展合同?

如果我有一个看起来有点像这样的类型集合,只会更详细:

type ValidValues = string | number | null
type ValidTypes = "text" | "time" | "unknown"

type Decorated = {
  name?: string | null
  type?: ValidTypes
  value?: ValidValues
  title: string
  start: number
}

type Injected = {
  extras: object
}

// overriding the types from Decorated
type Text = Decorated & Injected & {
  name: string
  type: "text"
  value: string
}
Run Code Online (Sandbox Code Playgroud)

我的实际代码还有更多内容,但这显示了核心思想。我不想必须相信自己才能使类型之间的关系恰到好处。Text在所有类型代数之后,我想要工具向我展示“评估”的类型定义。

因此,对于上面的示例,我希望 中指定的字段Text将覆盖该Decorated类型中先前的声明,并且我假设的工具提示的输出(我希望)会显示如下内容:

{
  name: string
  type: "text"
  value: string
  title: string …
Run Code Online (Sandbox Code Playgroud)

algebraic-data-types typescript visual-studio-code

41
推荐指数
2
解决办法
4532
查看次数

“同态映射类型”是什么意思?

我在一些 TypeScript PR 中看到了术语“同​​态映射类型”。这是一个例子:https : //github.com/microsoft/TypeScript/pull/21919

在 --strictNullChecks 模式下,当同态映射类型删除 ? 来自基础类型中的属性的修饰符,它还从该属性的类型中删除 undefined

什么是同态映射类型?究竟什么是同态?是否有一个非同态映射类型的好例子

我困惑的原因是同态是两个结构之间的映射,它保留了特定的操作。这里所讨论的操作是什么?也就是说,f映射在哪里,op下面等式中的内容是什么:

f(x op y) = f(x) op f(y)

我试过的

我试着去上的假设op&,操作相交两种类型。

那么一个同态映射将是这样的:

F<T & U> = F<T> & F<U>

同态映射的一个例子(来自TS 手册)是:

type Partial<T> = { [P in keyof T]?: T[P] }
Run Code Online (Sandbox Code Playgroud)

因为Partial<T & U>始终与 相同Partial<T> & Partial<U>

问题是我想不出任何方法来使映射类型非同态!

即使像这样愚蠢的人似乎也是同态的:

type Silly<T> = { [P in "foo"]: number}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,这Silly …

typescript

13
推荐指数
1
解决办法
650
查看次数