所以我总是在我的JavaScript代码中使用“严格”,但是我犯了一个愚蠢的错误。尽管“使用严格”捕获未用const
或let
定义的var,但对对象键却没有相同的作用。因此,我做了以下事情:
'use strict';
let foo = {
update: ''
};
// and much later in the code
foo['udpate'] = 'This is what I have been working on lately';
不用说,在处理了大约300K文件之后,我得到的结果差强人意,也不知道为什么。
那么,我应该怎么做才能让JS警告我?我现在应该迁移到 TypeScript 吗? TS是否可以防止此类错误?
答案 0 :(得分:3)
是的,Typescript在这里会有所帮助,尽管正如Brad在评论中指出的那样,这不是解决问题的唯一方法。
Typescript通过structural typing工作。如果您将类型添加到foo
,它将告诉您update
字段丢失:
let foo: UpdateHolder = { // Fails because UpdateHolder is missing the property "update".
udpate: 'This is what I have been working on lately'
};
如果不向foo
添加类型,则当您尝试将foo
分配给需要UpdateHolder的方法时,它将失败:
let foo = { // Succeeds.
udpate: 'This is what I have been working on lately'
};
processUpdate(foo); // Fails because foo is not assignable to UpdateHolder;
// this is because it's missing the "update" property.
// This assumes that elsewhere processUpdate is defined as:
function processUpdate(updateHolder: UpdateHolder);
// or:
function processUpdate(updateHolder: {update: string});
但是,由于Javascript是一种灵活的语言,因此Typescript不会为您验证foo
没有其他属性。它只会检查是否存在正确的属性,而不必检查是否存在不正确的属性。