【问题标题】:DefinitelyTyped Lodash绝对类型的 Lodash
【发布时间】:2016-07-22 07:13:19
【问题描述】:

我想从lodash 导入单个函数,同时保留类型。比如这样:

import invokeMap from 'lodash/invokeMap';

但我似乎不能这样做。编译器说没有模块lodash/invokeMap。没错——DefinitelyTyped 只为lodash 声明了顶级模块,所以我只能导入整个包。但我只想导入一个函数。

有没有办法只导入关于 lodash 的类型信息而不导入 lodash 本身?

以下是我的解决方案。我想使用标准的 CommonJS require 函数来导入没有类型信息的必要函数,然后将类型转换为它:

declare var require;

var invokeMap: _.invokeMap = require('lodash/invokeMap');
               ^^^^^^^^^^^
               Here I want to cast proper type from DefinitelyTyped,
               but how to reach that `invokeMap` typings alone?

【问题讨论】:

    标签: typescript lodash definitelytyped


    【解决方案1】:

    您可以使用对象解构从模块中仅导入invokeMap函数。

    import {invokeMap} from 'lodash';
    
    invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
    

    【讨论】:

    • 在只使用其中一个函数的情况下,它不会仍然导入所有lodash 包吗?我不想导入整个 lodash 以防止增加我的库的大小,因为它打算在浏览器中使用。
    • 你不能从一个文件中只导入一个函数,这不是 javascript 的工作方式。模块加载器将始终加载整个文件。 :)
    • 好的,我知道了。然后可以改进 lodash 类型以允许使用部分导入。比如core-jstypings do:github.com/DefinitelyTyped/DefinitelyTyped/blob/master/core-js/…
    • 我已经创建了一个问题:github.com/DefinitelyTyped/DefinitelyTyped/issues/8816 如果作者同意,我将创建一个具有此类改进的 PR。
    • 对我来说就像一个魅力 :) 顺便说一句,PR 已合并到 master 中。
    【解决方案2】:

    使用当前的类型 lodash,这应该可以像您之前尝试过的那样工作:

    import invokeMap from 'lodash/invokeMap';
    

    只需安装当前版本的环境依赖项,如下所示:

    typings i -SA github:DefinitelyTyped/DefinitelyTyped/lodash/lodash.d.ts#672afd8f7b09d839b61eeb4867753876cf79c8b6
    

    【讨论】:

      【解决方案3】:

      从 TypeScript 2 开始,您可以直接从 npm 安装类型:

      npm install @types/lodash

      这些类型对每个单独的模块都有声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-21
        • 2017-01-10
        • 2018-02-02
        • 2019-09-24
        • 2021-08-11
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多