在尝试在其他地方发布的建议后,我发现自己无法运行使用无类型NPM模块的打字稿项目.下面是一个最小的例子和我尝试的步骤.
对于这个最小的例子,我们假装lodash没有现有的类型定义.因此,我们将忽略该包@types/lodash并尝试手动将其打包文件添加lodash.d.ts到我们的项目中.
文件夹结构
接下来,文件.
文件 foo.ts
///<reference path="../typings/custom/lodash.d.ts" />
import * as lodash from 'lodash';
console.log('Weeee');
Run Code Online (Sandbox Code Playgroud)
文件lodash.d.ts直接从原始@types/lodash包复制.
文件 index.d.ts
/// <reference path="custom/lodash.d.ts" />
/// <reference path="globals/lodash/index.d.ts" />
Run Code Online (Sandbox Code Playgroud)
文件 package.json
{
"name": "ts",
"version": "1.0.0",
"description": "",
"main": "index.js",
"typings": "./typings/index.d.ts",
"dependencies": {
"lodash": "^4.16.4"
},
"author": "",
"license": "ISC"
}
Run Code Online (Sandbox Code Playgroud)
文件 tsconfig.json
{
"compilerOptions": {
"target": …Run Code Online (Sandbox Code Playgroud) 我正在尝试使Leaflet库与我的Typescript项目一起正常运行。
我的项目遵循commonJs模式(源文件中的import \ exports),但是当我使用webpack进行编译时,编译器从文件中提示以下错误,在这些文件中我尝试访问Leaflet L模块公开的全局变量
“ L”表示UMD全局,但当前文件是一个模块。考虑添加导入。
现在,如果我按如下方式将传单导入到源文件中,则可以解决此问题:
import * as L from 'leaflet'
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否可以在所有文件中全局访问t而不必在每个文件中都导入文件。
我进行了深入研究,发现了一些解决方法,您可以像这样声明自己的全局变量:
全球公司
import * as L from "leaflet";
declare global {
const L: L
}
export {};
Run Code Online (Sandbox Code Playgroud)
我不确定是否建议这样做,感觉有点脏,是否可以通过webpack config来为commonJs项目提供UMD模块公开的全局变量,还是我在胡说八道?我承认尝试理解模块类型及其互换性之间的差异会感到困惑,所以轻松一点!