打字稿中的import x = require('x')`和`const x = require('x')`之间的区别

爱国者*_*爱国者 1 typescript ecmascript-6

import x = require('x')在es6中,这似乎是无效的语法,并且打字稿文档中没有明确的解释。

Pal*_*leo 7

Q1:import … = require(…)const … = require(…)

在运行时(或在编译代码后),两种语法之间没有区别,第一种语法转换为第二种语法。

import

import x = require('x')
Run Code Online (Sandbox Code Playgroud)

此语法特定于TypeScript。常量x的类型由在导入的包或包中定义的某些类型给出@types/x

const

const x = require('x')
Run Code Online (Sandbox Code Playgroud)

这在JavaScript中当然是在TypeScript中是有效的语法。在TypeScript中,常量x的类型为any

问题2:import … from …import … = require(…)

import x from 'x'和之间的区别如何import x = require('x')

语法import … from …来自ES6标准。我建议阅读 ES6模块简介以及如何导入和导出它们。

但是,简而言之,语法import x from 'x'等效于:

import x = require('x').default
Run Code Online (Sandbox Code Playgroud)

(通知.default会员。)

如何转换import … = require(…)为ES6语法

ES6标准规定,所有导出的成员都可以导入到单个“命名空间对象模块”中

那么最接近的标准语法import x = require('x')是:

import * as x from 'x'
Run Code Online (Sandbox Code Playgroud)

目前,此语法可与TypeScript转译一起使用,因为代码已转换为const … = require(…)

但是:此语法应在标准定义的上下文中使用。因为,当您的代码使用ES6模块的本机版本时,您将无法以这种方式导入函数或类