【问题标题】:Using namespaces to avoid importing from each file使用命名空间避免从每个文件导入
【发布时间】:2018-12-25 20:53:17
【问题描述】:

根据这篇文章,您可以使用 TypeScript 命名空间来导入类型/接口而不包括导入:

https://scotch.io/tutorials/3-useful-typescript-tips-for-angular

但是,如果我创建一个命名空间:

export namespace ST {

  export interface Ifoo {

  }
}

为了让它被识别,我必须像这样导入它:

import {ST} from 'suman-types/dts/foo';

export const foo : ST.Ifoo = function () {

};

我做错了什么吗?如何使用命名空间轻松导入代码?

也许这只适用于 Angular 而不能真正适用于 CommonJS/Node.js?不知道为什么不。

【问题讨论】:

    标签: typescript tsc typescript-namespace


    【解决方案1】:

    正如你所指的页面上提到的,这实际上并不只绑定到 Angular。

    我一眼就能看出,您将export 与命名空间本身一起使用。

    export namespace ST {
          export interface Ifoo { }
    }
    

    scotch.io 上的示例说您应该只对嵌套接口使用 export。像这样:

    namespace ST {
          export interface Ifoo { }
    }
    

    这应该可以解决问题。那么就不再需要import。您应该能够在整个应用程序中使用命名空间,而无需任何进一步的输入语句。

    【讨论】:

    • 我想知道如果命名空间包含在 node_modules 而不是 tsconfig 的“include”属性中,这是否有效
    • 我有这样的 typeRoots 设置,所以也许这会起作用:` "typeRoots": [ "./node_modules/@types", "./node_modules/suman-types/dts" ],`
    • 也许这个链接会给你所需的提示,因为教程通常预设你没有知识并遗漏重要信息:typescriptlang.org/docs/handbook/namespaces.html
    • 另一个有用的帖子:stackoverflow.com/questions/38582352/…
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2023-04-03
    • 2019-03-27
    • 1970-01-01
    • 2022-12-10
    • 2019-05-11
    相关资源
    最近更新 更多