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

问题描述 投票:0回答:1

我在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

typescript definitelytyped
1个回答
1
投票

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

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

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

import = require()

导入看起来像这样:

electron-is-accelerator

如果启用declare module "electron-is-accelerator" { function isAccelerator(s: string): boolean; export = isAccelerator; } ,则可以将其写为ES默认导入:

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

isAccelerator("whatever")
© www.soinside.com 2019 - 2024. All rights reserved.