如果我有一个看起来有点像这样的类型集合,只会更详细:
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) 我在一些 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 …