为什么这个自定义类型定义不能正确地导出一个函数?
Why does this custom type definition not properly export a function?
我的 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 给任何想解决这个问题的人。
package 使用 CommonJS module.exports
语法导出函数:
module.exports = function (str) { ... };
module.exports
不同于 ES modules default export
语法和上面示例中的命名导出声明,因此 TS 有 export =
, import = require()
来表达这些 imports/exports。 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"
我的 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 给任何想解决这个问题的人。
package 使用 CommonJS module.exports
语法导出函数:
module.exports = function (str) { ... };
module.exports
不同于 ES modules default export
语法和上面示例中的命名导出声明,因此 TS 有 export =
, import = require()
来表达这些 imports/exports。 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"