【问题标题】:How do Typescript interface scope is working ? How to make interfaces global?Typescript 接口范围如何工作?如何使接口全球化?
【发布时间】:2020-09-20 22:44:32
【问题描述】:

我是 Typescript 和 Deno 的新用户,我不太了解接口范围的工作原理。

我有一个树层应用程序:

第一层(App.ts)是我的应用程序,这是我的应用程序的核心逻辑部分所在的地方。这部分可以是任何需要引用第二层(API.ts)的文件。

第二层 (API.ts) 是我可以与任何远程 API(如 Facebook、stripe、Google API)通信的入口点

第三层是一堆.ts文件。第二层(API.ts)可以与它们中的每一个进行通信。每个文件都处理特定 API 的非常精确的部分。例如,我有一个 FB_page.ts 来处理负责页面的 Facebook API 部分,另一个文件 STRP_Subscription 处理负责订阅的 Stripe API 部分等.

我的问题是

我有很多接口来处理每种类型的参数、每个错误以及 API 调用可以输入或输出的每个响应。我的应用程序的每一层都需要这些接口。

如果我可以将特定 API 部分的接口放入负责它的文件中,那将是非常酷的。例如,如果我需要 Facebook 页面 API 的多个接口,我想将它们放在 FB_page.ts 文件中。

但是,如果我在我的应用程序 App.ts 的第一层中需要它们,则必须导入 FB_page.ts 文件,如下所示: import {IPost, IPost_Error, IPost_Response} from '../lib/FB_page.ts';

所以我将它们放在 .d.ts 文件中,但它们似乎也不是全局的?

我怎样才能访问我的界面,而不必在我的应用程序的任何地方都导入它们?

感谢您的帮助。

【问题讨论】:

标签: typescript deno


【解决方案1】:

尝试导出命名空间

export as namespace ICalendar;
import { Document } from "mongoose";

export interface Calendar extends Document {
userId?: Object
}

【讨论】:

    【解决方案2】:

    Deno 中的几乎所有东西都是一个模块。如果您提供具有全局类型的非模块/脚本,则不会找到它。另外,Deno 无法处理 .d.ts 文件扩展名,除了一些带有 compiler hints 的地方。

    你能做什么

    1. 将包含接口的文件重命名为.ts
    2. 将全局类型放入模块中(带有import/export的文件)
    3. 确保导入该模块,以便 Deno CLI 在编译时可以找到它

    请注意,deno 使用自己的集成 TS 编译器,与您的 IDE(VS Code 和其他)不同。因此,没有显示类型错误的 IDE 并不意味着 deno rundeno cache 可以编译源代码。

    示例代码

    // Put following code inside one of your used modules
    declare global {
      interface IPost {
        foo: string;
      }
    }
    
    // IPost will be available globally without import
    const post: IPost = { foo: "bar" }
    

    如果您想将全局类型与其他代码分开,可以使用副作用导入:

    import "./lib/global.ts";
    const post: IPost = { foo: "bar" };
    
    全球.ts:
    export {}; // use some export to mark file as module
    declare global {
      interface IPost {
        foo: string
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多