打字稿和操作员

ppo*_*ani 29 typescript

我很难&在TypeScript中找到运算符的定义.我最近遇到了以下代码:

type IRecord<T> = T & TypedMap<T>;
Run Code Online (Sandbox Code Playgroud)

该运算符的作用是什么,它与union类型|有何不同?

Sam*_*son 49

这看起来像是语言规范的交叉类型部分.具体来说,&似乎是交叉型文字.至于它的作用:

交点类型表示同时具有多种类型的值.交集类型A和B的值是类型A和类型B的值.交叉类型使用交集类型文字写入(第3.8.7节).

该规范继续提供一个有用的片段,以更好地了解行为:

interface A { a: number }  
interface B { b: number }

var ab: A & B = { a: 1, b: 1 };  
var a: A = ab;  // A & B assignable to A  
var b: B = ab;  // A & B assignable to B
Run Code Online (Sandbox Code Playgroud)

因为ab是类型A 类型B,我们可以将其分配给a和/或b.如果ab只是类型B,我们只能分配给它b.

您共享的代码可能来自GitHub上的这条评论,其中提到了交叉类型.


Kyl*_*Mit 7

值得注意的是,如果您更喜欢使用接口而不是类型(尽管它们很大程度上相似),那么您通常可以使用接口扩展而不是类型交集,如下所示:

// base type
interface Shape {
  color: string;
}

// extension
interface Square extends Shape {
  sideLength: number;
}

// intersection
type Square = Shape & {
  sideLength: number;
}
Run Code Online (Sandbox Code Playgroud)

另请参阅TypeScript 中扩展接口和相交接口之间的区别?