繁体   English   中英

Typescript 联合类型和不可分配错误

[英]Typescript Union type & Not assignable error

我不确定为什么这不起作用。 如果 Term 既可以是 Node 也可以是 Literal,并且我提供了一个 Node. 为什么这里不接受这个术语? 我怎样才能最好地解决这个问题?

请注意,接口和联合类型来自不同的库,所以我只能更改NamedNode class 定义

单击此处在 typescript 操场上获取此代码

interface INamedNode {
  value: string;
  equals(term:Term):boolean;
}
interface ILiteral {
  value: string;
  language: string;
  equals(term:Term):boolean;
}
type Term = INamedNode | ILiteral;
abstract class BaseNode
{
    constructor(public value=''){}
}
class NamedNode extends BaseNode implements INamedNode {
  constructor(value=''){
    super(value);
  }

  equals(term:Term):boolean {
    return term === this;
  }

  nodeAsParameter(value: BaseNode){
        return this.equals(value);
    }
}

当前错误

“BaseNode”类型的参数不能分配给“Term”类型的参数。 “BaseNode”类型缺少“ILiteral”类型的以下属性:值、语言、等于

这个怎么样....

interface INamedNode extends Node {
  value: string;
  equals(term: Term): boolean;
}
interface ILiteral {
  value: string;
  language: string;
  equals(term: Term): boolean;
}

type Term = INamedNode | ILiteral;

abstract class BaseNode extends HTMLElement {
  constructor(public value = '') {
    super();
  }

  equals(term: Term): boolean {
    return term === this;
  }
}

class NamedNode extends BaseNode implements INamedNode {
  constructor(value = '') {
    super(value);
  }

  nodeAsParameter(value: BaseNode) {
    return this.equals(value);
  }
}

我们也可以很好地单独使用Node ,而不必定义单独的BaseNode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM