代码之家  ›  专栏  ›  技术社区  ›  Yuriy

将全局包与TypeScript一起使用的正确方法是什么?

  •  3
  • Yuriy  · 技术社区  · 7 年前

    我正在使用 global 在我的测试文件中使用某些酶方法而无需导入的包:

    import { configure, shallow, render, mount } from 'enzyme';
       .....
    global.shallow = shallow;
    global.render = render;
    global.mount = mount;
    

    所以我能写

    const component = shallow(<Input {...props} />);
    

    在我的测试文件中,不导入 shallow 方法

    但typescript不知道这一点,我得到一个错误: [ts] Cannot find name 'shallow'.

    我怎样才能告诉typescript这些全局变量?

    1 回复  |  直到 5 年前
        1
  •  2
  •   pascalpuetz    7 年前

    就是这样 declare 用于。将以下行添加到测试文件的顶部:

    declare const shallow:any; // Maybe more specific type information if you have ;

    除了使用declare,您还可以像这样类型化window对象:

    const component = (window as any).shallow(<Input {...props} />);
    

    或者像这样:

    const component = (<any> window).shallow(<Input {...props} />);
    

    但请记住,将函数公开为全局对象并不是一种好的做法。尤其是当您有两个同名函数时,因为其中一个将覆盖另一个。

    推荐文章