Typescript 接口范围如何工作?如何使接口全局化?

Try*_*ria 5 typescript deno

我是 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 文件中,但它们似乎也不是全局的?

我怎样才能访问我的接口,而不必将它们导入到我的应用程序中的任何地方?

感谢您的帮助。

for*_*d04 3

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

你可以做什么

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

请注意,它 deno使用自己的集成 TS 编译器,与您的 IDE(VS Code 等)不同。因此,没有显示类型错误的 IDE 并不意味着deno run可以deno 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" }
Run Code Online (Sandbox Code Playgroud)

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

import "./lib/global.ts";
const post: IPost = { foo: "bar" };
Run Code Online (Sandbox Code Playgroud) 全局.ts:
export {}; // use some export to mark file as module
declare global {
  interface IPost {
    foo: string
  }
}
Run Code Online (Sandbox Code Playgroud)