dcs*_*san 66 require typescript
我正在构建一个节点应用程序,并且.js中的每个文件内部用于执行此操作以在各种包中要求.
let co = require("co");
Run Code Online (Sandbox Code Playgroud)
但是得到
所以使用打字稿似乎在整个项目中只能有一个这样的声明/要求?我对此感到困惑,因为我认为let它的范围是当前文件.
我刚刚有一个正在运行的项目但是在重构之后我现在正在处理这些错误.
谁能解释一下?
Joh*_*isz 49
let用于声明块作用域中存在的局部变量而不是函数作用域.
导入外部模块的最新首选方法是ES6语法,它不包含任何明确的赋值:
if (condition) {
let a = 1;
...
let a = 2;
}
Run Code Online (Sandbox Code Playgroud)
小智 31
我在 vscode 上使用 ts 时也处理过这个问题。我解决这个问题的方法很简单,但可能与你的问题不一样。
当我在最近的选项卡中同时打开 typescript 文件和 javascript 文件时,我的编辑器显示此错误。我只是关闭它,错误就消失了。
希望这可以帮助那些可能也因这个简单的错误而摸不着头脑的人。
Obi*_*nya 18
对于这个时代来到这里的人,这里有一个简单的解决方案。它至少在后端对我有用。我没有检查前端代码。
只需添加:
export {};
Run Code Online (Sandbox Code Playgroud)
在代码的顶部。
倪俊杰*_*倪俊杰 14
这可以通过 tsconfig.json 中的 "moduleDetection": "force" 解决:
{
"compilerOptions": {
"moduleDetection": "force"
}
}
Run Code Online (Sandbox Code Playgroud)
参考: https: //www.typescriptlang.org/tsconfig#moduleDetection
Nev*_*ngi 11
我能得到的最好的解释是Tamas Piro的帖子。
TLDR;TypeScript将DOM类型用于全局执行环境。在您的情况下,全局窗口对象上有一个'co'属性。
要解决这个问题:
- 重命名变量,或者
- 使用TypeScript模块,并添加一个空的export {}:
export{};
Run Code Online (Sandbox Code Playgroud)
要么
- 通过不添加DOM类型来配置编译器选项:
在TypeScript项目目录中编辑tsconfig.json。
{
"compilerOptions": {
"lib": ["es6"]
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*tam 10
编译Node.JS Typescript应用程序时收到以下类似错误:
node_modules/@types/node/index.d.ts:83:15 - error TS2451: Cannot redeclare block-scoped variable 'custom'.
解决方法是删除此:
"files": [
"./node_modules/@types/node/index.d.ts"
]
Run Code Online (Sandbox Code Playgroud)
并替换为:
"compilerOptions": {
"types": ["node"]
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案是将我的代码从使用 CommonJS (require、module.exports等)转换为 ES 模块(import、export等)
TypeScript 文档似乎还推荐了 ES 模块语法:TypeScript Modules
当然,还有更多的内容,但首先:
require将的实例替换为import,例如
代替:
const https = require('https');
Run Code Online (Sandbox Code Playgroud)
和:
import https from 'https';
Run Code Online (Sandbox Code Playgroud)
将默认值替换为module.exports,export default例如
代替:
module.exports = myVar ...
Run Code Online (Sandbox Code Playgroud)
和:
export default myVar ...
Run Code Online (Sandbox Code Playgroud)
将其他替换module.exports为export, 例如
代替:
module.exports.myVar =
Run Code Online (Sandbox Code Playgroud)
或者:
module.export = { myVar ... }
Run Code Online (Sandbox Code Playgroud)
和:
export myVar ...
Run Code Online (Sandbox Code Playgroud)
更多内容请参见:从 CommonJS 到 ES 模块:如何实现 Node.js 应用程序的现代化
使用IIFE(Immediately Invoked Function Expression),IIFE
(function () {
all your code is here...
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59104 次 |
| 最近记录: |