我正在检查某人的.tsconfig
文件,发现了--esModuleInterop
这是他的.tsconfig
档案
{
"compilerOptions": {
"moduleResolution": "node",
"target": "es6",
"module": "commonjs",
"lib": ["esnext"],
"strict": true,
"sourceMap": true,
"declaration": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declarationDir": "./dist",
"outDir": "./dist",
"typeRoots": ["node_modules/@types"]
},
"include": ["src/**/*.ts"],
"exclude": ["node_modues"]
}
Run Code Online (Sandbox Code Playgroud)
在这里,我的主要问题是 "esModuleInterop": true,
和
"allowSyntheticDefaultImports": true,
。我知道他们有点依赖 "module": "commonjs",
。有人可以尝试用最好的人类语言来解释它吗?
allowSyntheticDefaultImports
州的官方文档
允许从模块进行默认导入而没有默认导出。这不影响代码发出,仅影响类型检查。
那是什么意思?如果没有任何导出默认值,我认为导入默认值的唯一用例就是初始化某些东西?喜欢单身人士吗?
以下问题/答案也没有意义, 是否可以在tsconfig中使用--esModuleInterop而不是将其作为标志?
并--esModuleInterop
在编译器页面上定义
发出__importStar和__importDefault帮助程序以实现运行时babel生态系统兼容性,并启用--allowSyntheticDefaultImports以实现类型系统兼容性。
我似乎也很难理解/理解
我如何为我的TypeScript模块需要jquery AMD模块.例如,假设脚本的目录结构如下所示:
jquery-1.8.2.js jquery.d.ts module.ts require.js
我希望从module.ts生成的js文件要求通过require.js加载jquery-1.8.2.js.
目前我有:
import jquery = module('jquery')
这导致当前范围中不存在名称"jquery".
我是Typscript 2的新手.我要做的是在打字稿中使用jQuery.在这个问题中我读到你需要两件事:
npm install --save-dev @types/jquery
Run Code Online (Sandbox Code Playgroud)
这将安装包'@ types/jquery 2.0.39'.
"devDependencies": {
"@types/jquery": "^2.0.39",
"typescript": "^2.0.2",
"typings": "^1.0.4"
}
Run Code Online (Sandbox Code Playgroud)
然后,在Typescript文件中我把它:
import $ from "jquery";
Run Code Online (Sandbox Code Playgroud)
但我得到了打字稿错误'无法找到模块'jquery'.我究竟做错了什么?
同样的错误
import $ = require("jquery");
Run Code Online (Sandbox Code Playgroud)
完整的打字稿文件:
import { Component } from '@angular/core';
import $ from "jquery";
@Component({
selector: 'my-app',
template: `<div id="test"></div>`,
})
export class AppComponent {
constructor() {
$('#test').html('This is a test');
}
}
Run Code Online (Sandbox Code Playgroud)