如何解决将 null 分配给类型化变量时,Visual Studio Code 在 Typescript 代码中报告错误
我有以下界面:
interface CompositeNodeInterface {
name: string;
definer: any;
parent: CompositeNodeInterface;
children: [CompositeNodeInterface];
addChild(definer: any): CompositeNodeInterface
}
如您所见,属性 parent
被类型化为递归实现相同接口的对象,而属性 children
被类型化为同样递归实现相同接口的对象数组。>
我有以下实现 CompositeNodeInterface
的类:
export default class CompositeNode implements CompositeNodeInterface {
name: string;
definer: any;
parent: CompositeNode;
children: [CompositeNode];
constructor(definer: any) {
switch(definer.constructor.name) {
case 'Object':
if ('name' in definer) {
this.name = definer.name;
} else {
this.name = String(Object.values(definer)[0]);
}
break;
default:
this.name = definer.toString();
}
this.definer = definer;
this.parent = null;
this.children = [];
}
acceptVisit(visitor: VisitorInterface) {
return visitor.visit(this)
}
}
问题是当属性parent
设置为null
时,VSC报如下错误:Type 'null' is not assignable to type 'CompositeNode'
,当属性children
设置为{{1} },VSC 报告 []
。
我读到 here 所有属性都可以为空,所以我希望这些操作是有效的。
解决方法
您不再可以为每个字段分配空值或未定义值,因为:https://github.com/Microsoft/TypeScript/pull/7140
您需要将值显式设置为可空,可能使用联合类型,例如 CompositeNode | null
,或者另外您可以将 parent 设为可选
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。