为啥在 Typescript 泛型中使用 '&'

Posted

技术标签:

【中文标题】为啥在 Typescript 泛型中使用 \'&\'【英文标题】:Why use '&' in Typescript generic为什么在 Typescript 泛型中使用 '&' 【发布时间】:2019-03-08 09:50:27 【问题描述】:

我是 Typescript 的新手。在下面的代码中,我看到使用带有“&”的泛型。我不明白这是什么意思?我认为2个接口可以加入并喜欢1个接口工作?

import * as React from 'react';

export interface StatefulCounterWithDefaultProps 
 label: string;
 initialCount?: number;


interface DefaultProps 
 readonly initialCount: number;


interface State 
  readonly count: number;


export const StatefulCounterWithDefault: 
React.ComponentClass<StatefulCounterWithDefaultProps> =
class extends React.Component<StatefulCounterWithDefaultProps & 
 DefaultProps> 

static defaultProps: DefaultProps = 
  initialCount: 0,
;

readonly state: State = 
  count: this.props.initialCount,
;

componentWillReceiveProps( initialCount : StatefulCounterWithDefaultProps) 
  if (initialCount != null && initialCount !== this.props.initialCount) 
    this.setState( count: initialCount );
  


handleIncrement = () => 
  this.setState( count: this.state.count + 1 );


render() 
  const  handleIncrement  = this;
  const  label  = this.props;
  const  count  = this.state;

  return (
    <div>
      <span>label: count </span>
      <button type="button" onClick=handleIncrement>
        `Increment`
      </button>
    </div>
  );

;

在这段代码中:React.Component<StatefulCounterWithDefaultProps & DefaultProps> 2 个接口用 & 连接在一起。 它是如何工作的?

【问题讨论】:

这就是所谓的类型交集。 typescriptlang.org/docs/handbook/advanced-types.html What does the ampersand (&) mean in a TypeScript type definition?的可能重复 【参考方案1】:

那些被称为交集类型。见https://www.typescriptlang.org/docs/handbook/advanced-types.html#intersection-types

【讨论】:

以上是关于为啥在 Typescript 泛型中使用 '&'的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 的泛型中使用扩展

为啥 TypeScript 中的方法链接会导致泛型类型推断失败?

Java泛型中通配符的使用

为啥 TypeScript 对象不能用泛型类型索引?

Java泛型中T和问号(通配符)的区别

C# 在泛型中重复使用类型时缩短语法?