如何在 Typescript 中编写 Kotlinesque 扩展函数?

Ada*_*old 7 javascript extension-methods kotlin typescript extension-function

Kotlin如果我有interface这样的:

interface User {
    val name: String
    val email: String
}
Run Code Online (Sandbox Code Playgroud)

我可以在代码中的任何位置编写这样的扩展函数:

fun User.toUserDto(): UserDto {
    TODO()
}
Run Code Online (Sandbox Code Playgroud)

打字稿中,如果我有类似的interface

export default interface User {
    name: string;
    email: string;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能以类似的方式增强它?这是该语言的最佳实践吗?有没有我不知道的替代方案?

ino*_*nik 0

Typescript 中的接口只能描述数据的形状,不能创建它们的实例或改变它们。

要编写接口的扩展函数,您需要在类中实现接口,并在类中添加您需要的任何内容。

export class SomeUserClass implements User {
  name: string;
  email: string;
  
  constructor(name, email) {
    ...
  }

  toUserDto() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是我问题的答案。扩展函数非常强大,因为使用它们我可以增强类/接口**我无法控制**(就像来自依赖项的类)。这是我的用例。 (2认同)