当前位置:  开发笔记 > 编程语言 > 正文

NodeJS + TypeScript:类型为脚本编译代码的语法不清楚

如何解决《NodeJS+TypeScript:类型为脚本编译代码的语法不清楚》经验,为你挑选了3个好方法。

我正在尝试在我的节点项目中使用Typescript,但是遇到了一些问题.

这是我的index.ts文件:

import express from 'express';

const app = express();

我在跑:

tsc --module commonsjs -d index.ts

我的输出是index.js:

var express_1 = require('express');
var app = express_1["default"]();

["default"]是从哪里来的?它使我的代码无法正常运行:

var app = express_1["default"]();
                              ^

TypeError: express_1.default is not a function

据我所知,我应该得到没有"默认"括号的代码,它会工作正常 - 我尝试删除括号,它的工作原理.

我在这里错过了什么?



1> dvlsg..:

最安全的解决方案是:

import express = require('express');

这转化为:

var express = require('express');

可以在此处找到导入需要声明的官方文档.

我相信typescript期望一个名为"default"的导出作为上面的代码,从这里的最后一段来看.


旁注,看起来像打字稿的最新版本(撰写本文时为typescript@1.8.0-dev.20151229)将在编译尝试时发出警告,该尝试将尝试使用缺少的默认值:

index.ts(1,8): error TS1192: Module '"express"' has no default export.

附注2,import * as express from 'express';可以在此处找到Microsoft使用语法的示例.当定位的模块commonjs(如它们是在该示例中),这也将transpile到var express = require('express');.



2> Liam..:

我通过添加以下内容来解决此问题tsconfig.json

{
  "compilerOptions": {
    ... 
    "module": "commonjs",
    "esModuleInterop": true,
    ...
  }
}

所述esModuleInterop标志被描述为:“的Emit __importStar和__importDefault助手用于运行时巴贝尔生态系统的相容性和使能类型系统兼容性--allowSyntheticDefaultImports”。

https://www.typescriptlang.org/docs/handbook/compiler-options.html



3> C Snover..:

如果您尝试使用非ES6模块(如Express)的默认导出,则需要使用旧版import语法import express = require('express')。在ES6模块中,没有默认值导出,例如module.exportsNode.js模块或returnAMD模块。ES6模块的默认导出只是default关键。这就是为什么当您import尝试使用默认的ES6时,TypeScript生成具有对该default属性访问权限的JavaScript的原因。

有关此问题的更多信息,请参见用于导入commonjs / amd模块的新es6语法,即“ import foo = require('foo')”。

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有