Typescript接口作用域如何工作?如何使接口具有全局性?

特洛尔·阿隆布里亚

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

我如何可以访问接口而不必将其导入应用程序中的所有位置?

感谢您的帮助。

福特04

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

你可以做什么

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

请注意,它deno使用了自己的集成TS编译器,与您的IDE(VS Code和其他IDE)之一不同。所以,没有表现出类型错误的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" };
global.ts:
export {}; // use some export to mark file as module
declare global {
  interface IPost {
    foo: string
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章