错误 TS2322:类型 '~lib/array/Array<~lib/string/String> | null' 不可分配给类型 '~lib/array/Array<~li



Holder有一个字符串数组(Holder.positions(。这个函数只想把position参数的ID推到数组上。

这是我的功能

function updateHolder(holder: Holder, position: Position): void {
if(holder.positions == null){
const positions: string[] = [];
holder.positions = positions;
}
holder.positions.push(position.id);
}

我得到的错误是

ERROR TS2322: Type '~lib/array/Array<~lib/string/String> | null' is not assignable to type '~lib/array/Array<~lib/string/String>'.

holder.positions.push(position.id);
~~~~~~~~~~~~~~~~

这似乎是在说";你试图推到数组上的东西要么是字符串数组,要么是null,但它必须是字符串数组"。这使得。。。对我来说毫无意义。

AssemblyScript在推导不可为null性期间的null安全性目前比TS更严格。

因此,在AS中,您可以使用感叹号!:进行修复

export function updateHolder(holder: Holder, position: Position): void {
if (holder.positions == null) {
holder.positions = [];
}
holder.positions!.push(position.id); // add "!"
}

Btw Dart也无法证明这样的情况:https://dartpad.dev/df0be72a941f4d515a5ecfec6a8ee7d9

因此,在复杂的情况下可能是不健全的。TypeScript可以,因为TS在很多情况下已经不稳定了。

相关内容

  • 没有找到相关文章

最新更新