为什么此自定义类型定义不能正确导出函数?

时间:2019-12-01 19:53:08

标签: typescript definitelytyped

我在Typescript项目中有一个npm依赖项(electron-is-accelerator),它不带任何类型,既不是包的一部分,也不是DefinitelyTyped的一部分。依赖关系由一个模块组成,该模块只有一个函数接受一个字符串并返回一个布尔值。我在src/@types/electron-is-accelerator中写了一个类型定义,如this article中所述:

declare module 'electron-is-accelerator' {
    export function isAccelerator(s: string): boolean;
}

我试图这样执行此功能:

import { isAccelerator } from 'electron-is-accelerator';

console.log(isAccelerator("Alt+Space")); 

但是出现以下运行时错误:

TypeError: electron_is_accelerator_1.isAccelerator is not a function

我如何运行它?

我的tsconfig.json

{
    "compilerOptions": {
        "outDir": "./built",
        "module": "commonjs",
        "target": "es6",
        "noImplicitAny": true,
        "sourceMap": false
    },
    "include": [
        "src/**/*"
    ]
}

我为想要解决该问题的任何人上传了一个最小的演示示例here

1 个答案:

答案 0 :(得分:1)

package使用CommonJS module.exports语法导出函数:

module.exports = function (str) { ... };

module.exports与ES模块default export的语法和上面示例中的命名导出声明不同,因此TS具有export =, import = require()来表示这些导入/导出。可以使用以下声明键入electron-is-accelerator

declare module "electron-is-accelerator" {
  function isAccelerator(s: string): boolean;

  export = isAccelerator;
}

导入看起来像这样:

import isAccelerator = require("electron-is-accelerator")

isAccelerator("whatever")

如果启用了esModuleInterop,则可以将其写为ES默认导入:

import isAccelerator from "electron-is-accelerator"