我常常遇到TypeScript问题,并使用名为event
的参数来引用该事件。
问题是当我在方法中使用它时,但忘记将其声明为输入参数时,请参阅:
addItem = () =>
{
var popup = new Popup();
popup.show( event ); // this function i.e. needs a default click event forwarded
}
一切都适用于Chrome - 我更喜欢开发的浏览器 - 但后来我发现部署后Firefox的问题。
问题是event
在Chrome的全局范围内可用,并且在默认的打字稿 lib.d.ts 文件中也定义如下。
99.99%的时间我不想在全局范围内使用event
- 我认为这是一种反模式。
我可以在TypeScript中取消声明全局变量吗?
答案 0 :(得分:1)
虽然您可以扩充任何界面,包括Window
,但您无法更改预先存在的字段的类型。例如,这不起作用:
interface Window {
event: never; // Error: redeclarations must have the same type
}
如果您的代码库适合启用strictNullChecks
,则使用全局event
属性将失败,因为其类型声明为Event | undefined
。
因此,如果启用了strictNullChecks,则会出错:
document.onload = () => {
console.info(event.target); // Error: event can be undefined
};
处理程序上的命名事件参数在其类型中不会有undefined
,此错误可能会为您提供添加参数的提示。
但是如果你不能启用strictNullChecks,就没办法强迫它。
TSLint可能会添加一条禁止这些全局变量的规则,请参阅the current PR,这至少会在lint阶段发现这一点。