typescript Lodash -“_”引用了UMD全局,而lodash.js不是模块错误

mhd8tkvw  于 2022-12-19  发布在  TypeScript
关注(0)|答案(7)|浏览(437)

如果我什么都不做,只添加类型定义,它对jquery有效,但lodash会得到一个
"_"引用UMD全局,但当前文件是模块。请考虑改为添加导入。
如果我尝试用import调用的任意组合导入lodash,则会得到
lodash.js不是模块
我试图通过问一个问题here来获得帮助,但它被关闭了,因为有another answer表示Angular (Angular 2)。我真的需要一个真正的答案,所以我重新发布了我自己的解决方案,希望有人最终能帮助我理解这个问题。
在这种情况下,我是:
1.不使用任何框架,如Angular
1.使用类型脚本
1.使用requirejs导入模块
1.使用Visual Studio
1.使用MVC5

fafcakar

fafcakar1#

安装lodash后,我在工作文件中使用import * as _ from 'lodash';

cgvd09ve

cgvd09ve2#

我在全局类型定义文件(~\src\typings.d.ts)中添加了以下代码来解决这个问题。

// lodash global typing - begin
declare namespace _ {
}
// lodash global typing - end
eagi6jfj

eagi6jfj3#

我在我的~\src\typings.d.ts中添加了:

declare const _;

对我很有效。See also

2vuwiymt

2vuwiymt4#

其他的答案对我都不起作用。下面是我的解答。
使用此方法,您将能够从全局include加载lodash
您还将获得至关重要的类型提示,而不必将lodash构建到Webpack包中
Lodash现在可以在所有ts文件中全局访问,而无需导入它
这是我的设置。

    • 超文本标记语言**
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js" integrity="sha256-VeNaFBVDhoX3H+gJ37DpT/nTuZTdjYro9yBruHjVmoQ=" crossorigin="anonymous"></script>
</head>
    • 国家预防机制**
npm i @types/lodash lodash --save-dev
    • 网络包**
externals: {
    _: 'lodash'
}
    • 全球. d. ts**
import _ from 'lodash';
declare global {
    const _: typeof _;
}
    • 系统配置json**
"types": [
    "lodash"
],
    • 条目. ts**
console.log(_.VERSION)

此方法将加快编译捆绑包所需的时间。减少生成大小,从而减少每次生成后下载到客户端的大小,并允许客户端使用CDN中的缓存库,该库可能已存在于以前生成、其他页面或其他网站的内存中。

kcwpcxri

kcwpcxri5#

如果您知道这样做是安全的,则有一个编译器选项允许这样做:
--allowUmdGlobalAccess允许从模块访问UMD全局变量。

hgb9j2n6

hgb9j2n66#

"_"引用UMD全局,但当前文件是模块。请考虑改为添加导入。
这是由类型定义引起的。进入@types/lodash文件并删除以下行:

export = _;
export as namespace _;

这将解决错误。

编辑*

如果类型定义文件中有任何全局声明,例如,如下所示,则删除上面的export语句将导致另一个错误:

declare global { }

要解决这个问题,要么将属性从全局声明中移到引用它们的接口中,要么将它们完全删除,并将引用的类型更改为泛型。我不确定哪种解决方案会使最终编译更好,但前一种解决方案在我的应用程序中没有引起任何问题,早在IE11之前。

cgyqldqp

cgyqldqp7#

我在react应用程序中使用loadash时遇到了同样的错误,错误是**_.uniqWith()
然后我去掉了
下划线点号**并将其用作uniqWith()。
这解决了我的错误

import { uniqWith } from loadash;

相关问题