打字稿导入/作为vs import / require?

时间:2016-02-29 17:53:00

标签: javascript node.js express typescript

我正在使用TypeScript与Express / Node.js

对于使用模块,TypeScript手册显示以下语法:

import express = require('express');

typescript.d.ts文件也显示:

import * as express from "express";

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

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

查找有关最新语法的信息的最佳来源在哪里,以便将来可以找到此信息?

2 个答案:

答案 0 :(得分:98)

这些大致相当,但import *有一些import ... = require没有的限制。

import * as创建一个模块对象的标识符,强调对象。根据ES6规范,此对象永远不可调用或new能够 - 它只具有属性。如果您尝试导入函数或类,则应使用

import express = require('express');

或(取决于您的模块加载器)

import express from 'express';

根据ES6规范,尝试使用import * as express然后调用express()始终是非法的。在某些运行时+转换环境中,无论如何都可能会发生这种情况,但是在未来的任何时候它都可能会在没有警告的情况下中断,这会让你感到难过。

答案 1 :(得分:7)

import * as express from "express";

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

在任何情况下,在tsconfig.json文件中,您应该将模块选项定位到commonjs,这是nodejs支持的格式。