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

Javascript 如何在Typescript中编写Kotlinesque扩展函数?,javascript,typescript,kotlin,extension-methods,extension-function,Javascript,Typescript,Kotlin,Extension Methods,Extension Function,如果我有这样一个界面,我将使用Kotlin: 用户界面{ val名称:String val电子邮件:String } 我可以在代码的任何地方编写这样的扩展函数: fun User.tuserdto():UserDto{ 待办事项() } 在Typescript中,如果我有类似的界面: 导出默认用户界面{ 名称:字符串; 电子邮件:字符串; } 如何以类似的方式扩展它?这是该语言的最佳实践吗?我不知道还有什么替代方法吗?在Typescript中,只能描述数据的形状,不能创建它们的实例或对它们

如果我有这样一个
界面
,我将使用Kotlin:

用户界面{
val名称:String
val电子邮件:String
}
我可以在代码的任何地方编写这样的扩展函数:

fun User.tuserdto():UserDto{
待办事项()
}
在Typescript中,如果我有类似的
界面

导出默认用户界面{
名称:字符串;
电子邮件:字符串;
}
如何以类似的方式扩展它?这是该语言的最佳实践吗?我不知道还有什么替代方法吗?

在Typescript中,只能描述数据的形状,不能创建它们的实例或对它们进行变异

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

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

  toUserDto() {
    ...
  }
}
您可以进行扩充,但这取决于属性,并且没有
User.prototype
(也没有
User
值)


你也可以看到这一点。Kotlin/C#方法被拒绝的原因是。

这不是对我问题的回答。扩展函数很强大,因为使用它们我可以扩展我无法控制的类/接口(比如依赖项中的类)。这是我的用例,我投了反对票,因为答案中包含了Typescript中的行
接口是用来描述数据的形状的,它们不能包含函数修复不,它不是。请阅读并参阅“您也可以描述在类中实现的接口中的方法”,但它们是。为什么你认为它们不是呢?你不能调用
Foo.update()
,因为
Foo
不是一个值;你可以在任何类型为
foo
foo
上调用
foo.update()
。这在类型脚本中是不可能的,因为它不会根据类型信息改变其发射。对我的答案做了一点改进,希望它有帮助当我想用类型脚本的方式扩充我无法控制的类时,什么是最佳做法?对于类,在这里可以看到第一个链接或另一个示例,但它不像Kotlin中那样常见。我在TypeScript方面没有足够的经验来判断最佳实践,但这似乎很好。对于您的用例来说,一个可能重要,也可能不重要的区别是,扩展实际上添加到了原型对象中,例如Javascript客户端将看到它们,以及同一类(或子类)上具有相同名称的两个“扩展函数”我会崩溃的。