scr*_*ter 5 javascript nullable typescript
我不明白不可为空类型和 Typescript 标志背后的推理strictNullChecks。当我确信我已经完成了变量的值以从内存中释放它并且 GC 可以收集它时,我总是将变量的值设置为 null。我的测试表明,它可以使 JavaScript 代码的执行速度提高很多倍,尤其是在长而深的循环中。这是一个不好的做法吗?是否应该将某些类型的变量设置为 null 而其他类型的变量不应该设置为 null?
在大多数情况下,您不必自己删除变量值。这可能是一个设计缺陷。另请注意,如果要删除对象属性值,使用以下内容可能会更一致:
delete myObject.attr; // set 'undefined'
Run Code Online (Sandbox Code Playgroud)
我不明白不可为空类型和 Typescript 的 strictNullChecks 标志背后的推理。
要了解背后的逻辑,请检查此示例:
// strictNullChecks: false
interface Sample {
color: string;
width: number;
}
function doSomething(sample: Sample): Sample {
if(sample.width > 10) {
return null;
}
return sample;
}
const first: Sample = {
color: 'red',
width: 15
};
const second: Sample = doSomething(first);
console.log(second.width); // Uncaught TypeError: Cannot read property 'width' of null
Run Code Online (Sandbox Code Playgroud)
此代码仅在没有strictNullChecks标志的情况下编译。在这种情况下,当代码运行时,我们会遇到一个漂亮的错误:Uncaught TypeError: Cannot read property 'width' of null。
检查功能doSomething。它返回一个Sample类型,但没有标志我们可以返回null。这里的问题是,当我们调用这个函数时,返回的值将被操作为Sample=>类型与其真实值类型之间存在不一致。这是导致错误的一个重要原因。
我认为 TS 类型必须反映最佳的实际值类型。
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |