TS 通用 "string" 语法的文档
Documentation for TS generic "string" syntax
此语法按预期编译和工作:
window.addEventListener("keydown", this.handlerKeyDown, false);
...
this.handlerKeyDown = (evt => {
let ke = evt as KeyboardEvent;
console.log("handlerKeyDown saw", ke.key);
return false;
});
但它需要强制转换为 KeyboardEvent。
我注意到当我将鼠标悬停在 addEventListener 方法上时,提示显示
(method) Window.addEventListener<"keypress">(type: "keypress",
listener: (this: Window, ev: KeyboardEvent) => any,
options?: boolean | AddEventListenerOptions | undefined): void (+1 overload)
我真的更喜欢不需要强制转换的强类型签名,但我费了好大劲才找到这种语法的文档。
尝试猜测,我注意到 Window.addEventListener<"keypress">(
语法不会扰乱我的编译器,但我无法弄清楚定义侦听器的 lambda 表达式需要什么。
任何人都可以举例说明或提供正确的搜索词吗?
有一个让我费解的事情就是如何控制事件是否被消费。 EventListener 的定义是
interface EventListener {
(evt: Event): void;
}
根据 Basarat 的回答,我尝试指定一个更强的签名,但这与 EventListener 接口不兼容,这就是我查看上面已经发布的定义的原因。
Basarat 提出了完全相同的方法,这让我更加鼓舞,我尝试了这个
this.handlerKeyDown = (ke: Event | KeyboardEvent) => {
if (ke instanceof KeyboardEvent) {
console.log("handlerKeyDown saw", ke.key);
if (this.router && ke.key === "Esc") {
this.router.navigateBack();
}
return true;
}
};
这不再扰乱编译器,但它并不是对转换的巨大改进。
I'd really prefer a strongly typed signature that doesn't require the cast
添加注释:
this.handlerKeyDown = (evt: KeyboardEvent => {
更多
如果您将其内联,编译器将对其进行推断:
window.addEventListener("keydown", (e /* type will be inferred */) => {});
此语法按预期编译和工作:
window.addEventListener("keydown", this.handlerKeyDown, false);
...
this.handlerKeyDown = (evt => {
let ke = evt as KeyboardEvent;
console.log("handlerKeyDown saw", ke.key);
return false;
});
但它需要强制转换为 KeyboardEvent。
我注意到当我将鼠标悬停在 addEventListener 方法上时,提示显示
(method) Window.addEventListener<"keypress">(type: "keypress",
listener: (this: Window, ev: KeyboardEvent) => any,
options?: boolean | AddEventListenerOptions | undefined): void (+1 overload)
我真的更喜欢不需要强制转换的强类型签名,但我费了好大劲才找到这种语法的文档。
尝试猜测,我注意到 Window.addEventListener<"keypress">(
语法不会扰乱我的编译器,但我无法弄清楚定义侦听器的 lambda 表达式需要什么。
任何人都可以举例说明或提供正确的搜索词吗?
有一个让我费解的事情就是如何控制事件是否被消费。 EventListener 的定义是
interface EventListener {
(evt: Event): void;
}
根据 Basarat 的回答,我尝试指定一个更强的签名,但这与 EventListener 接口不兼容,这就是我查看上面已经发布的定义的原因。
Basarat 提出了完全相同的方法,这让我更加鼓舞,我尝试了这个
this.handlerKeyDown = (ke: Event | KeyboardEvent) => {
if (ke instanceof KeyboardEvent) {
console.log("handlerKeyDown saw", ke.key);
if (this.router && ke.key === "Esc") {
this.router.navigateBack();
}
return true;
}
};
这不再扰乱编译器,但它并不是对转换的巨大改进。
I'd really prefer a strongly typed signature that doesn't require the cast
添加注释:
this.handlerKeyDown = (evt: KeyboardEvent => {
更多
如果您将其内联,编译器将对其进行推断:
window.addEventListener("keydown", (e /* type will be inferred */) => {});