【问题标题】:How to create a TypeScript module that matches complex paths?如何创建匹配复杂路径的 TypeScript 模块?
【发布时间】:2020-09-01 03:12:51
【问题描述】:

我想声明一个针对所有图像导入的全局模块和另一个针对所有图标导入的全局模块,因为在我正在处理的项目中对它们的处理方式不同。图片导入通常来自images 文件夹和icons 来自icons 文件夹,但它们的扩展名可以相同。

根据modules wildcard documentation我想到了这样的事情:

declare module '*/icons/*' {
    type IconType = { viewBox: string, symbol: string };

    const icon: IconType;
    export = icon;
}

declare module '*/images/*' {
    const url: string;
    export = url;
}

但这似乎不起作用。有没有其他方法可以做到这一点?在 Flow 中可以使用 module.name_mapper 来定义它,但是如何在 TypeScript 中实现呢?

【问题讨论】:

    标签: typescript module


    【解决方案1】:

    尝试通过文件后缀声明模块,每个文件类型一个声明。

    declare module '@my/module/src/images/*.svg' {
      type IconType = { viewBox: string, symbol: string };
    
      const icon: IconType;
      export = icon;
    }
    
    declare module '@my/module/src/icons/*.svg' {
      const resource: string;
      export = resource;
    }
    

    【讨论】:

    • 这正是 TypeScript 网站上提到的,但这对我不起作用,因为图像和图标都有后缀 *.svg。还有其他方法吗?
    • 感谢您的更新。我试过了,但还是不行。举个例子:导入路径可能如下所示:@my/module/src/icons/checkbox/checked.svg.
    • 我测试了一下,唯一可行的解​​决方案是指定整个路径
    • 您是否尝试在全局模式中添加**,例如@my/module/src/icons/**/*.svg
    • 我明白了...好吧,我添加了一个功能请求:github.com/microsoft/TypeScript/issues/38638。与此同时,我想我必须想出某种依赖于@ts-ignore 的解决方案?
    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2019-10-07
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多