提问者:小点点

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


我有一个示例类:

// 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个答案

匿名用户

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

export class chatUsers implements IUsers {

  // Wrapper function
  public addUser(name: string): void {
    // Your imported function
    addUser.call(this, "name");
  }
  
}