【发布时间】:2019-01-24 09:14:43
【问题描述】:
我知道 typescript 和 javascript 不支持函数重载。
而且我正在研究一种绕路方法来像这个函数重载一样工作。
我的情况如下。
第一:
最后一个和第一个参数是固定的。
public A(arg1:number, arg2:number, argLast:any){
}
public A(arg1:number, arg2:number, arg3:Array<any>, argLast:any){
}
第二:
有函数是否重载的指示器。
当然,和上面的例子一样,是可以的,但是我必须通过一个新的接口来创建它,所以它不适合我的情况。
我尝试过各种函数重载方法。
我也通过 john resig 博客实现了它。
(https://johnresig.com/blog/javascript-method-overloading/)
下面的代码是我通过上面的博客做的一个例子。
function addMethod (object, name, fn) {
var old = object[ name ]
object[ name ] = function () {
if (fn.length === arguments.length) {
return fn.apply(this, arguments)
} else if (typeof old === 'function') {
return old.apply(this, arguments)
}
}
}
export class Users{
find(...arg: any[]){
Users.prototype['findOVF'](arg)
}
}
addMethod(Users.prototype, 'findOVF', function () {
console.log('ARG 0')
})
addMethod(Users.prototype, 'findOVF', function (name:string, age:number) {
console.log('ARG 2')
})
addMethod(Users.prototype, 'findOVF', function (first_name:string, last_name:string,age:number) {
console.log('ARG 3')
})
var users = new Users()
users.find()
users.find('John',19)
users.find('John', 'Resig', 19)
当我使用这个方法时,我用参数(... arg)来调用函数。
我已经尝试实现了下面博客的所有方法。
(https://blog.mariusschulz.com/2016/08/18/function-overloads-in-typescript)
public A(arg1:number, arg2:number, argLast:any){
}
public A(arg1:number, arg2:number, arg3:Array<any>|null, argLast:any){
}
如果我以这种方式实现函数重载,每次调用 A 函数时都会出错。这不是真正的函数重载。
但是我还没有找到同时实现这两个元素的方法。
我想知道这对于打字稿语法是不可能的,还是有其他可能性。
感谢您看到我笨拙的英语。
【问题讨论】:
-
我不太清楚什么不起作用。您能否发布一个完整的示例,其中包含您想要工作但无法正常工作或无法按预期工作的代码?
-
好的。我现在就发帖。但是,写作会很长。希望你能理解。
-
我试图描述我尝试的方法。我也有一个问题......对不起。
标签: function typescript overloading