typescript导入/作为 vs 导入/需要?

IT技术 javascript node.js express typescript
2021-02-14 05:25:25

我正在使用带有Express/ 的TypeScript Node.js

对于消费module,TypeScript 手册显示了以下语法:

import express = require('express');

但该typescript.d.ts文件显示:

import * as express from "express";

我还搜索了 MSDN 博客,但找不到任何内容。

截至 2016 年初,哪个更正确?如果有的话,两者之间有什么区别?

在哪里可以找到有关要使用的最新语法的信息的最佳来源,以便我将来可以找到这些信息?

2个回答

这些大多是等价的,但import *有一些import ... = require不一样的限制

import * as创建一个标识符,它是一个module对象,重点是object根据 ES6 规范,此对象永远不可调用或new无法调用——它只有属性。如果你想导入一个函数或类,你应该使用

import express = require('express');

或(取决于您的module加载器)

import express from 'express';

根据 ES6 规范,尝试使用import * as express然后调用express()总是非法的。在某些运行时+转译环境中,这可能无论如何都可以工作,但它可能会在未来的任何时候毫无预警地中断,这会让您感到难过。

在visual studio的源代码中,我发现他们写 import express = require('express');
2021-04-18 05:25:25
“通常你应该使用 ES6 语法,除非你有一些理由不这样做(我想不出任何随意的)” FWIW 我这个重复的问题中给出了一个答案为什么不在这里
2021-04-23 05:25:25
@Ryan Cavanaugh“取决于你的module加载器”是什么意思?我如何找出我有什么module加载器?谢谢。
2021-04-29 05:25:25
@AdamThompson 是的,请参阅“2016 年更新”部分。
2021-05-03 05:25:25
我对这里明显的矛盾有点困惑。我应该遵循哪些建议?@CSnover 您的建议在 2016 年的今天仍然适用于您发布时的建议吗?谢谢你。
2021-05-09 05:25:25
import * as express from "express";

这是建议的做法,因为它是自去年以来 JavaScript (ES6/2015) 的标准。

无论如何,在您的 tsconfig.json 文件中,您应该将module选项定位到 commonjs,这是 nodejs 支持的格式。

@Emobe 我发现只有当您的 ts.config 具有“esModuleInterop”时才为真:如果该标志设置为假,则为真,express() 似乎是有效代码
2021-04-16 05:25:25
@Sam 有效但不干净。那样使用它是没有意义的。
2021-04-22 05:25:25
但这手段express应该是导出的对象,被称为是没有意义的express()
2021-05-15 05:25:25