【问题标题】:TypeScript .d.ts definition for function with a callback parameter doesn't provide auto-completion in Intellij IDEA带有回调参数的函数的 TypeScript .d.ts 定义在 Intellij IDEA 中不提供自动完成功能
【发布时间】:2018-08-08 00:10:08
【问题描述】:

我一直在尝试为 JavaScript 项目设置一些 .d.ts 定义,以向 Intellij IDEA 添加自动完成功能。

我试图定义的 JavaScript 代码示例是:

var testObj = {
    tests: function (it) {
        it("Should...", function (screen) {

        })
    }
};

'screen'回调参数应该有自动完成的地方。

我通过添加一些链接到 .d.ts 接口的 JSDoc cmets 成功地做到了这一点:

var testObj = {
    /** @param {function(*,function(TestNamespace.IScreen))} it */
    tests: function (it) {
        it("Should...", function (screen) {

        })
    }
};

var testObj = {
    tests: function (it) {
        it("Should...",
            /** @param {TestNamespace.IIt} it */
            function (screen) {

            })
    }
};

第一个解决方案的问题是它看起来过于复杂,我相信它可以用/** @param {TestNamespace.IIt} it */ 之类的东西来简化,但是当链接到这个界面时,“屏幕”对象会失去所有相关的自动完成功能..

第二种解决方案的问题是,我必须对创建的每个“it”块重复注释。

所以我想要的是能够使用第一个解决方案,但没有冗长而复杂的 JSDoc 注释,而是使用直接链接到TestNamespace.IIt 接口的更短的 JSDoc 注释。我在想我在 IIt 接口定义上犯了一个错误,但我似乎无法弄清楚我做错了什么。希望我想要的都是可能的。任何帮助将不胜感激!

我拥有的当前 .d.ts 文件的简化版本是:

export = TestNamespace;
declare namespace TestNamespace {
    export interface IIt {
        (description: string, callback: (screen: IScreen) => void): void
    }

    export interface IScreen {
        doSomething(): void
    }
}

【问题讨论】:

    标签: javascript typescript intellij-idea jsdoc


    【解决方案1】:

    您可以将接口指定为类型参数而不使用jsdoc:

    var testObj = {
        tests: function(it) {
            it('Should...', function(screen: TestNamespace.IScreen) {});
        }
    };
    

    【讨论】:

    • 我的主项目代码使用的是JavaScript,不是TypeScript,我没有能力切换。我正在尝试使用 TypeScript 定义文件将代码完成添加到我的 JavaScript 项目中,因此在某些时候我将不得不使用 JSDoc。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多