【问题标题】:Typescript import/as vs import/require? [duplicate]打字稿导入/作为与导入/要求? [复制]
【发布时间】:2016-06-12 21:10:44
【问题描述】:

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

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

import express = require('express');

typescript.d.ts 文件也显示:

import * as express from "express";

我也搜索了 MSDN 博客,但没有找到任何东西。

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

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

【问题讨论】:

    标签: javascript node.js express typescript


    【解决方案1】:

    这些大部分是等效的,但import * 有一些import ... = require 没有的限制。

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

    import express = require('express');
    

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

    import express from 'express';
    

    根据 ES6 规范,尝试使用 import * as express 然后调用 express() 始终是非法的。在某些运行时+转译环境中,这可能会发生,但它可能会在将来的任何时候中断而不会发出警告,这会让您感到难过。

    【讨论】:

    • “一般来说,你应该使用 ES6 语法,除非你有理由不这样做(我想不出任何副手)” FWIW I gave an answer why not in this duplicate question here
    • 我对这里明显的矛盾感到有些困惑。我应该遵循哪些建议? @CSnover 您的建议在 2016 年的今天仍然像您发布它时一样适用吗?谢谢。
    • @AdamThompson 是的,请参阅“2016 年更新”部分。
    • 在visual studio的源码中,我发现他们写的是import express = require('express');
    • @Ryan Cavanaugh “取决于你的模块加载器”是什么意思?如何找出我拥有的模块加载器?谢谢。
    【解决方案2】:
    import * as express from "express";
    

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

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

    【讨论】:

    • 但这意味着 express 应该是导出的对象,被称为 express() 是没有意义的
    • @Emobe 我发现只有当您的 ts.config 具有“esModuleInterop”时才为真:如果该标志设置为假,则为真, express() 似乎是有效代码
    • @Sam 有效但不干净。这样使用没有意义。
    猜你喜欢
    • 2017-02-01
    • 2020-04-19
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多