相关疑难解决方法(0)

如何使用 Typescript 的声明与从模块导入的接口合并?

https://www.typescriptlang.org/docs/handbook/declaration-merging.html

上述链接提供了有关与接口合并的声明的信息。我希望能够使用具有通用组件的界面来做到这一点。我目前正在使用 Typescript 3.0.3。

这做我想要的,但我不明白为什么我不能用声明合并做同样的事情。

interface MyRouteComponentProps<P, C extends StaticContext = StaticContext> extends RouteComponentProps<P, C> {
    loadCandidateFromQueryParam: (candidateId: number) => void
}

class CandidateDetailContainer extends React.Component<MyRouteComponentProps<RouteMatchProps>, {}> {

    public componentWillMount() {
        this.props.loadCandidateFromQueryParam(Number(this.props.match.params.candidateId));
    }
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

interface RouteComponentProps<P, C extends StaticContext = StaticContext> {
    loadCandidateFromQueryParam: (candidateId: number) => void
}

class CandidateDetailContainer extends React.Component<RouteComponentProps<RouteMatchProps>, {}> {
Run Code Online (Sandbox Code Playgroud)

它似乎完全覆盖了 RouteComponentProps 的整个定义,而不是合并它们。我收到与从未使用过的 P 和 C 相关的错误(如果合并了定义,那么我希望这些错误会消失,因为它们在主定义中使用)。然后我收到一个关于“匹配”字段不存在的错误。同样,原始定义中存在的另一个字段。

作为参考,这里是我试图合并的原始定义。

export interface RouteComponentProps<P, C extends StaticContext = StaticContext> {
  history: H.History;
  location: H.Location;
  match: match<P>;
  staticContext: C | …
Run Code Online (Sandbox Code Playgroud)

generics typescript

6
推荐指数
1
解决办法
3397
查看次数

标签 统计

generics ×1

typescript ×1