![](/img/trans.png)
[英]Typescript Error on Union type in generic : ' is not assignable to type'
[英]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.