TypeScript import/as vs import/require?

2022-08-30 04:57:17

我正在将TypeScript与Express / Node.js一起使用。

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

import express = require('express');

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

import * as express from "express";

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

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

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


答案 1

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

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

import express = require('express');

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

import express from 'express';

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


答案 2
import * as express from "express";

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

无论如何,在 tsconfig.json 文件中,您应该将模块选项的目标指向 commonjs,这是 nodejs 支持的格式。