当前位置: 首页 > 知识库问答 >
问题:

typescript - 大佬们,Typescript如何把一个包里所有的方法当做类型或接口?

钱雅逸
2023-09-30

如下文件中定义的这些方法
image.png
我想给window添加runtime属性,且拥有这些方法的提示:
image.png

共有2个答案

宇文学博
2023-09-30

runtime: typeof wailsjs

杨乐意
2023-09-30

首先,我想指出的是,你提供的截图看起来不像是 TypeScript 的代码。TypeScript 是 JavaScript 的一个超集,它添加了静态类型、类、接口和其他一些特性。在你提供的示例中,看起来更像是 Visual Studio Code 的代码片段或某个类似的东西。

如果你想要把一个包或者文件中的所有方法作为 TypeScript 类型或接口,你需要明确定义这些方法的类型。以下是一个简单的示例:

// 文件 methods.tsexport interface MyWindow {    method1(arg1: string, arg2: number): void;    method2(arg1: boolean, arg2: Array<number>): string;    // 添加更多的方法...}

在这个示例中,我们定义了一个接口 MyWindow,该接口包含两个方法 method1method2。每个方法都有自己的参数和返回类型。

然后,你可以在其他文件中引入这个接口,并实现它:

// 文件 main.tsimport { MyWindow } from './methods';window.runtime = {} as MyWindow;window.runtime.method1 = function(arg1: string, arg2: number): void {    // 实现 method1}window.runtime.method2 = function(arg1: boolean, arg2: Array<number>): string {    // 实现 method2}

在这个示例中,我们首先引入了 MyWindow 接口。然后,我们为 window.runtime 分配了一个对象,该对象是 MyWindow 的一个实现。最后,我们为 window.runtime 添加了 method1method2 方法。这些方法的类型和 MyWindow 中的方法类型一致,因此 TypeScript 不会有任何警告或错误。

注意,这只是一个基本示例。在实际应用中,你可能需要处理更复杂的情况,例如默认参数、可选属性、可变参数等。TypeScript 的类型系统非常强大,你可以使用它来处理这些更复杂的情况。

 类似资料:
  • 我撰写并发表了以下内容:https://github.com/justin-calleja/pkg-dependents 现在我写这个包在TypeScript:https://github.com/justin-calleja/update-dependents 我想在update dependents中重复使用pkg dependents(IndexInfoDict)中定义的类型,我想检查是否有

  • 这些语句(接口vs类型)有什么区别?

  • 定义如下 使用 出现下面的报错: 为什么在使用typeof的情况下ts对类型判断还是有问题?平常在消费联合类型的时候,都只需要借助typeof就能达到缩小类型范围的目的,但是这里没有效果,我想问下什么时候会出现这种问题? 我知道解决方案: 通过强制的类型断言来告诉ts这是一个函数 通过is关键字来做类型预测 但是不知道什么时候需要这么去解决,只有报错的时候才会尝试这么去解决,恳求大佬解惑。

  • 问题背景: 如下图,我有个数组,是一个常量 我现在想定义一个变量 current ,我想这个变量的值是 label 这四个字符串的其中一个。 我了解到,我可以重新声明一个 type Tab = "攻略"|"商城"... 这样一个类型,然后给 tabList 和 current 分别使用。 但是有没有一种方法直接让 Ts 提取出 tabList 的 label 元素自动提取呢?有点类型体操的感觉

  • TypeScript中的这些语句(与)之间有什么区别?

  • 假设有一个类库X的输入文件,其中包含一些接口。 为了使用这个库,我需要传递一个与。当然,我可以在源文件中创建相同的接口: 但这样一来,我就有了让它和库中的一个保持最新的负担,而且它可能非常大,并导致大量代码重复。 因此,有没有办法“提取”接口的这个特定属性的类型?类似于(这不起作用,导致“找不到名称I2”错误)。 编辑:在TS操场上玩了一会儿后,我注意到以下代码完全实现了我想要的: 但是,它需要声