考虑定义如下的 FooBar1 和 FooBar2
类型:
type Foo = { foo: string };
type Bar = { bar: number };
type FooBar1 = Foo & Bar;
type FooBar2 = { foo: string; bar: number };
我的尝试/研究:
TSD
检查 - 请参阅此处)TSD
检查 - 见这里){ foo }
// |------------------------------------------------------------|
// | let x: { |
// | a: string; |
// | } & { |
// | b: string; |
// | } |
// | -----------------------------------------------------------|
// ^
// | When hovering `x` here:
// |
let x: { a: string } & { b: string };
编辑:TypeScript中扩展和交叉接口之间的区别?已被建议为重复,但我不同意。我不是在将交集与接口的扩展进行比较,而是将交集与另一种原始类型进行比较,不涉及接口或扩展。
在您的示例中,我们可以说< code>FooBar1和< code>FooBar2相等。而且我们确实可以证明:
type Equals<A, B> =
A extends B
? B extends A
? true
: false
: false
type test0 = Equals<{a: 1} & {b: 2}, {a: 1, b: 2}> // true
但是对于一个笼统的回答,我们只能说,它们并不总是相等的。为什么?因为在某些情况下,交集可以解析为< code>never。如果ts发现一个交集是有效的,它继续进行,否则返回< code>never。
import {O} from "ts-toolbelt"
type O1 = {a: 1, b: 2}
type O2 = {a: 1} & {b: 2} // intersects properly
type O3 = {a: 1, b: 2} & {b: 3} // resolved to `never`
type test0 = Equals<O1, O2>
// true
type test1 = O.Merge<{a: 1, b: 2}, {b: 3, c: 4}>
// {a: 1, b: 2, c: 4}
这里类型 O3
解析为从不
,因为 b
是 3
,它不能与 2
重叠。让我们更改我们的示例,以证明如果您有以下情况,交叉点将起作用:
import {A} from "ts-toolbelt"
type O4 = A.Compute<{a: 1, b: number} & {b: 2}> // {a: 1, b: 2}
type O5 = A.Compute<{a: 1, b: 2} & {b: number}> // {a: 1, b: 2}
这个例子还强调了交集的工作原理——就像并集交集一样。TypeScript 将遍历所有属性类型并将它们相交。我们强制 TypeScript 计算与 A.Compute
交集的结果。
简而言之,如果 ts 不能重叠所有成员,那么该交集的乘积永远不会。
因此,它可能不适合作为合并工具:
type O3 = {a: 1, b: 2} & {b: 3} // resolved to `never`
所以请记住,<代码>
问题内容: 在Java中,这两个函数声明之间有什么区别? 在这里,您可以找到该问题的答案,但仅适用于 C / C ++ 。在这些语言中,两种声明样式的存在是完全有意义的。 但是在 Java 中这有什么意义呢? 问题答案: 后者在Java中是非法的。您不能声明这样的方法。您应该得到这样的错误: 因此,不仅没有意义-您根本找不到尝试使用此样式的有效代码。
我可以通过以下方法将数据发送到Firebase FiRecovery文档: 1) 添加() 2) set() 我很清楚,如何将数据添加到Firestore中,其中没有任何混淆。但我的问题是,Firebase Firestore中的方法“set”有两个setOption,例如merge和mergefields。这两组选项之间的区别是什么,我认为这两个选项的作用是相同的。如何实现setOption“m
问题内容: 请考虑以下两个函数定义: 两者之间有什么区别吗?如果没有,那为什么会有void争论呢?审美原因? 问题答案: 在C中: 表示“带有未指定类型的未指定数量的参数的函数” 表示不带参数的函数” 在C ++中: 表示“foo不带参数的函数” 表示“foo不带参数的函数” 因此,通过编写,我们可以在两种语言中实现相同的解释,并使标头变为多语言(尽管我们通常需要对标头做更多的事情才能使它们真正成
本文向大家介绍Java中传统集合与并行集合之间的区别,包括了Java中传统集合与并行集合之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,在Java中,集合是最重要的概念之一,它使Java本身成为一种强大的语言。它仅支持Java中的集合,这使得它可以方便,有效地支持任何类型的数据以及可能对它们进行的CRUD操作。 但是在同一阶段,当集合暴露于多线程环境时,由于某些地方集合缺乏对多线程环
本文向大家介绍Java中的集合与集合之间的区别,包括了Java中的集合与集合之间的区别的使用技巧和注意事项,需要的朋友参考一下 Java收集框架用于操纵对象的收集。收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等。 集合是Java集合框架中的接口。它分为两部分- Java util集合-它包含诸如Set,queue,List等的类。 Ja
本文向大家介绍Java中列表和集合之间的区别,包括了Java中列表和集合之间的区别的使用技巧和注意事项,需要的朋友参考一下 List和Set这两个接口都属于Collection框架。这两个接口都扩展了Collection接口。它们都用于将对象集合存储为单个单元。 在jdk1.2之前,我们曾经使用Arrays,Vectors和Hashtable将对象分组为一个单元。 序号 键 列表 组 1个 位