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

TS:在保留强类型的同时在单独的文件中实现类函数

公西岳
2023-03-14

我有一个示例类:

// chatUsers.ts
import { IUsers } from "../../Interfaces/IUsers.ts"


export class chatUsers implements IUsers {
  // methods..
}

我想在单独的文件中实现它的方法以保持代码干净,而不是在一个文件中实现所有的东西。

我当前的方法(如这里所建议的):导入那些函数并将它们绑定到这个类实现:

// IUsers.ts
interface IUsers {
  addUser: (name: String) => (void);
  // other methods
}
// chatUsers.ts
import { IUsers } from "../../Interfaces/IUsers.ts"
import { addUser } from "./Add.ts"

export class chatUsers implements IUsers {
  public addUser = addUser.bind(this);
  // other methods..
}
// Add.ts
import { chatUsers } from "./chatUsers.ts"

export function addUser(this: chatUsers, name: String) {
  // implementation
}

一切正常,只是addUser函数不再由TS守护,我可以随便叫它:

// somewhere in business logic:
let local_chat_users = new chatUsers();
local_chat_users.addUser(true, null, "Josh", 42);

有没有更好的方法在几个文件中实现一个类?

共有1个答案

赵骏奇
2023-03-14

实际上,我不知道是否有任何好的解决方案存在,以绑定函数类型安全。但是作为一个快速的解决方案,您可以将导出的函数包装在您的类中。

export class chatUsers implements IUsers {

  // Wrapper function
  public addUser(name: string): void {
    // Your imported function
    addUser.call(this, "name");
  }
  
}
 类似资料:
  • 我最近在我没有编写的代码中遇到了这个场景,虽然这种方法可能有一些设计上的好处,但我似乎无法从我自己的大脑中挤出这个原理。所以在我看起来很傻之前,我希望这里有一些反馈。 服务接口如下所示: 然后是一个向服务接口添加泛型引用的基类,其中T扩展了服务,但随后整个基类也实现了该接口。类似这样的事情: 你为什么要这么做?我注意到,在实践中,ServiceBase的扩展总是使用与正在声明的类名相同的类名T;所

  • 问题内容: 如何确保类型在编译时实现接口?这样做的典型方法是失败地分配该类型的支持接口,但是我有几种类型只能动态转换。在运行时,这会生成非常粗糙的错误消息,而没有给出针对编译时错误的更好诊断。在运行时发现我期望支持接口的类型也很不方便,实际上却不支持。 问题答案: 假设问题是关于围棋的,例如 因为顶级域名(TLD)会在编译时为您检查。

  • 问题内容: 至少在Java中,编译器不允许我将两个(或多个)单独的类放在一个类文件中。它迫使我在同一程序包中创建多个文件。我理解为什么会这样,并且我同意这一原则。但是,我已经意识到,我可以轻松地将类嵌套并在单个文件中包含整个程序(不包括导入的库)。我想这会被皱眉,但是我不明白为什么。与标准系统相比,嵌套类的危害和不利之处是什么(除了组织和整洁度的严重损失之外)? 问题答案: 好吧,如果将所有内容保

  • 我有一些HTML元素,它们都有相同的标记。每个div都有一个唯一的父类。 因此,当我尝试编写一些jQuery来单独针对每个元素时,它会在所有实例上触发,而不管我是否指定要针对哪个类。我的想法是,通过使用(this)它将只针对div“box__wrapper-before”中的内容。 有人知道我错在哪里吗? null null Codepen示例:https://Codepen.io/nickels

  • 使用AWS-cdk进行实验,很容易看出堆栈/后端构造类文件是如何变得相当大的。在这个cdk Stack类示例中(从aws-cdk api-cors-lambda-crud-Dynamodb示例中复制和剪枝),是否有一种惯用的方法来从堆栈类构造函数函数中提取Dynamodb、lambda和apigateway构造函数定义到单独的文件中?他们都把作为第一个参数。我希望有一个单独的文件,用于所有lamb

  • 假设我想写一个函数,它可以接受一个参数,这个参数可以是null类型,也可以是非null类型。如果参数不可为null,则返回类型也应不可为null。类似地,如果参数是可空类型,那么返回类型也应该是可空类型。 以下是我为实现这一职能所做的尝试: 函数签名似乎是正确的,因为它在调用站点上实现了所需的行为,例如: 即返回类型确实由参数类型以正确的方式确定。 然而,我的问题在于函数的实现。如果不将返回值强制