当Node.js的许多文件中存在具有相同名称的顶级const或let时,为什么Typescript会出错
Why does Typescript error when there is a top level const or let with the same name in many files with Node.js
为什么在顶级声明const
或let
会导致TS2451错误(见下文(?我知道在浏览器中,所有脚本都共享顶级作用域,但我是为Node.js编写的,所有模块都封装在Node.js中。
- 这个场景中的错误与Node.js相关吗?
- 如果不能,它可以配置掉/配置是我的问题吗
- 为什么var没有出现同样的错误?
- var、const和let的顶级作用域不是几乎相同吗
a.ts:
let lme = 'A';
const cme = 'A';
var me = 'a';
b.js:
let lme = 'A';
const cme = 'A';
var me = 'a';
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": false,
"sourceMap": false
},
"exclude": [
"node_modules"
]
}
输出:
$ tsc
a.ts(3,5): error TS2451: Cannot redeclare block-scoped variable 'lme'.
a.ts(4,7): error TS2451: Cannot redeclare block-scoped variable 'cme'.
b.ts(3,5): error TS2451: Cannot redeclare block-scoped variable 'lme'.
b.ts(4,7): error TS2451: Cannot redeclare block-scoped variable 'cme'.
上下文:
$ tsc --version
Version 1.8.10
$ node --version
v6.5.0
我最初是在尝试将多个文件从.js
移植到具有const fs = require('fs');
的.ts
时遇到这种情况的。我认为最基本的东西只会在为Node.js编写的ts
和js
之间工作
编译器不会将.ts
文件视为模块,除非文件中有(使用(导入或导出
因此,它抱怨变量的重新声明。
例如:
const A = 3;
被编译成
var A = 3;
而
import * as Utils from "./utils"
const A = 3 * Utils.A;
被编译成
"use strict";
var Utils = require("./utils");
var A = 3 * Utils.A;
如果没有导入/导出,编译器就不会将其视为模块。
编辑
您可以使用require
语法,只需要参考节点定义:
/// <reference path="./node.d.ts" />
const Utils = require("./utils")
相关文章:
- 带有let的JS/EECMAScript6私有字段的模式
- 如何定义const函数javascript(语法糖)
- Javascript 中的 const 关键字 scope
- JavaScript中let和var之间的区别
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 所以我正在使用Javascript const关键字,在IE中会发生什么
- let与var的性能
- Javascript alert()在没有const字符串的情况下不显示
- 对于grunt构建中的(let.of)错误
- ES6/JavaScript-声明不带let/const的变量
- 没有var,let或const的对象解构
- 复合let/const赋值是什么意思
- AngularJS:块作用域声明(let、const、function、class)在严格模式之外还不支持
- 未捕获的SyntaxError:在严格模式之外还不支持块范围的声明(let、const、function、class)
- 使用if语句和let/const语句,不带块语句
- 我们可以到处用const代替let吗?
- v8 const, let和var对JavaScript性能的影响
- Javascript ES6 export const vs export let
- 当Node.js的许多文件中存在具有相同名称的顶级const或let时,为什么Typescript会出错
- 是用let或const声明的变量