无法从nodejs中的打字稿文件中要求默认导出的函数
not able to require default exported function from typescript file in nodejs
我正在尝试用打字稿构建一个 npm 包。
我无法要求和使用 typescript 模块中导出的默认函数。我曾尝试将 tsconfig.json
中的模块选项更改为 UMD
和 AMD
,但没有成功。
//index.ts
export default function () {
console.log("greet");
}
export function greet2() {
console.log("greet2");
}
//tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonJS",
"declaration": true,
"outDir": "./lib",
"strict": true
}
}
//index.js
const greet = require("./lib/index");
greet();
greet.greet2();
//console
greet();
^
TypeError: greet is not a function
可以使用webpack来解决,但是我想知道有没有不用webpack的方法。
问题是您混合了模块语法。当您使用 require 时,您将取回一个带有 default
属性 和 greet2
属性.
的对象
require
假设您知道导出的结构,因为它们几乎可以是您用 module.exports = anything
指定的任何形状,另一方面,ES 模块有严格的规范。这允许 import 假设来自 export 的形状并做一些事情,比如方便地为你解构它。
目前,如果你记录它,greet 变量将是一个像这样的对象:
Object {default: function _default(), greet2: function greet2()}
这当然不是函数,因此是错误。
如果改为使用导入语法
import greet from './lib/index';
它将编译成等同于:
const greet = require('./lib/index').default;
您当然可以以同样的方式使用 require 自己,您只需要知道从 require
返回的任何内容的形状并相应地对其进行解构。
我正在尝试用打字稿构建一个 npm 包。
我无法要求和使用 typescript 模块中导出的默认函数。我曾尝试将 tsconfig.json
中的模块选项更改为 UMD
和 AMD
,但没有成功。
//index.ts
export default function () {
console.log("greet");
}
export function greet2() {
console.log("greet2");
}
//tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonJS",
"declaration": true,
"outDir": "./lib",
"strict": true
}
}
//index.js
const greet = require("./lib/index");
greet();
greet.greet2();
//console
greet();
^
TypeError: greet is not a function
可以使用webpack来解决,但是我想知道有没有不用webpack的方法。
问题是您混合了模块语法。当您使用 require 时,您将取回一个带有 default
属性 和 greet2
属性.
require
假设您知道导出的结构,因为它们几乎可以是您用 module.exports = anything
指定的任何形状,另一方面,ES 模块有严格的规范。这允许 import 假设来自 export 的形状并做一些事情,比如方便地为你解构它。
目前,如果你记录它,greet 变量将是一个像这样的对象:
Object {default: function _default(), greet2: function greet2()}
这当然不是函数,因此是错误。
如果改为使用导入语法
import greet from './lib/index';
它将编译成等同于:
const greet = require('./lib/index').default;
您当然可以以同样的方式使用 require 自己,您只需要知道从 require
返回的任何内容的形状并相应地对其进行解构。