首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未预料到的关键字或identifier.ts(1434) \x函数实现在declaration.ts(2391)之后丢失或没有立即实现

未预料到的关键字或identifier.ts(1434) \x函数实现在declaration.ts(2391)之后丢失或没有立即实现
EN

Stack Overflow用户
提问于 2021-07-30 09:24:00
回答 1查看 8.6K关注 0票数 1

我正在尝试使用typesript将键盘功能添加到我的蛇游戏项目中,但是在代码的第42和43行中出现了错误,这些错误是:

  1. 在“窗口”上空盘旋,我得到:

解析错误:“;”expected.eslint意外关键字或identifier.ts(1434)

  1. 在".addEventListener“上空盘旋,我得到:

函数实现在declaration.ts(2391)之后丢失或没有立即实现

(3)在第2行的“窗口”上空盘旋时,还会出现以下错误:

重复标识符‘window’..ts(2300)

代码语言:javascript
运行
复制
interface keyUtil{
    value:string,
    isDown:boolean,
    isUp:boolean,
    press:undefined|any,
    release:undefined|any
}

export class keyboard implements keyUtil{    
    // privatethis:object = {};
    constructor(public value:string, public isDown:boolean, public isUp:boolean, public press:any, public release:any){
        this.value = value;
        this.isDown = false;
        this.isUp = true;
        this.press = undefined;
        this.release = undefined;
    }
    
    downHandler = (event: KeyboardEvent) => {
        if (event.key === this.value) {
            if (this.isUp && this.press) this.press();
            this.isDown = true;
            this.isUp = false;
            event.preventDefault();
        }
    };

    
    upHandler = (event: KeyboardEvent) => {
        if (event.key === this.value) {
            if (this.isDown && this.release) this.release();
            this.isDown = false;
            this.isUp = true;
            event.preventDefault();
        }
    };

    
    const downListener = this.downHandler.bind(this);
    const upListener = this.upHandler.bind(this);
    
    //Error on following two lines:  
    window.addEventListener(type: "keydown", downListener:any):void;
    window.addEventListener(type: "keyup", upListener:any):void;
    

    unsubscribe = () => {
        window.removeEventListener("keydown", this.downListener);
        window.removeEventListener("keyup", this.upListener);
    };
}

我尝试的解决方案是将tsconfig文件的noImplicitAny属性修改为false。当我用js编写函数时,我试图将文件转换为ts。以下是js代码:

代码语言:javascript
运行
复制
function keyboard(value) {
    let key = {};
    key.value = value;
    key.isDown = false;
    key.isUp = true;
    key.press = undefined;
    key.release = undefined;
    
    key.downHandler = event => {
        if (event.key === key.value) {
            if (key.isUp && key.press) key.press();
            key.isDown = true;
            key.isUp = false;
            event.preventDefault();
        }
    };

    
    key.upHandler = event => {
        if (event.key === key.value) {
            if (key.isDown && key.release) key.release();
            key.isDown = false;
            key.isUp = true;
            event.preventDefault();
        }
    };

    
    const downListener = key.downHandler.bind(key);
    const upListener = key.upHandler.bind(key);

    window.addEventListener(
        "keydown", downListener, false
    );
    window.addEventListener(
        "keyup", upListener, false
    );

    
    key.unsubscribe = () => {
        window.removeEventListener("keydown", downListener);
        window.removeEventListener("keyup", upListener);
    };

    return key;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-30 09:32:08

您将函数定义与函数调用混合在一起。

这是一个(错误的)函数定义:

代码语言:javascript
运行
复制
//Error on following two lines:  
    window.addEventListener(type: "keydown", downListener:any):void;
    window.addEventListener(type: "keyup", upListener:any):void;

应该将类构造函数作为函数调用放在类构造函数上。

代码语言:javascript
运行
复制
constructor() {
    window.addEventListener("keydown", downListener);
    window.addEventListener("keyup", upListener);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68588537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档