首页 > 解决方案 > KeyboardEvent 打字稿的索引签名

问题描述

我正在使用严格模式的打字稿,我们为这样的接口编写索引签名[key: string]: any但是我们应该如何为键盘事件等事件编写索引签名,以下代码出现错误'KeyboardEvent' has no index signature.ts(7017)

public checkInput(event: KeyboardEvent): void {
        if (event['keyIdentifier'] !== undefined) {
            keyCode = event['keyIdentifier'];
        }
    }

标签: javascripttypescript

解决方案


正如 MDN条目所述,这是一个非标准的、已弃用的功能:

已弃用的 KeyboardEvent.keyIdentifier 只读属性返回一个“键标识符”字符串,可用于确定按下的键。它的非弃用替代品是KeyboardEvent.key

如果您坚持使用它,您可以keyIdentifier转换为适当的键KeyboardEvent

public checkInput(event: KeyboardEvent): void {
    if (event['keyIdentifier' as 'key'] !== undefined) {
        const keyCode = event['keyIdentifier' as 'key'];
    }
}

其他选项是转换为any( (event as any)['keyIdentifier']) 或增加全局类型:

interface KeyboardEvent {
    keyIdentifier: string
}
class s {
    public checkInput(event: KeyboardEvent): void {
        if (event.keyIdentifier !== undefined) {
            const keyCode = event.keyIdentifier;
        }
    }
}

推荐阅读