[英]not able to require default exported function from typescript file in nodejs
我正在尝试在打字稿中构建一个 npm 包。 我无法要求和使用在 typescript 模块中导出的默认函数。 我曾尝试将tsconfig.json
模块选项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 模块另一方面有严格的规范。 这允许导入假设来自导出的形状,并为您方便地解构它。
目前,如果你记录它,greet 变量将是一个像这样的对象:
Object {default: function _default(), greet2: function greet2()}
这当然不是函数,因此不是错误。
如果您使用导入语法
import greet from './lib/index';
它将编译为等效于:
const greet = require('./lib/index').default;
您当然可以以同样的方式使用 require 自己,您只需要了解从require
返回的任何内容的形状并相应地对其进行解构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.