Javascript 我可以在TypeScript中扩展函数吗?

Javascript 我可以在TypeScript中扩展函数吗?,javascript,function,scope,typescript,closures,Javascript,Function,Scope,Typescript,Closures,我想创建一个超级棒的容器类,它只包含一个值 let a = new Container(42); 我想得到这样的值 a(); // 42 a(43); 然后像这样设置值 a(); // 42 a(43); 有没有办法在TypeScript中实现这一点?JavaScript/TypeScript中不正确支持运算符重载。 除了试图调用类时调用的构造函数之外,不能定义函数。JavaScript/TypeScript中不正确支持运算符重载。 除了试图调用类时调用的构造函数之外,不能定义其他函数

我想创建一个超级棒的容器类,它只包含一个值

let a = new Container(42);
我想得到这样的值

a(); // 42
a(43);
然后像这样设置值

a(); // 42
a(43);

有没有办法在TypeScript中实现这一点?

JavaScript/TypeScript中不正确支持运算符重载。
除了试图调用类时调用的构造函数之外,不能定义函数。

JavaScript/TypeScript中不正确支持运算符重载。 除了试图调用类时调用的构造函数之外,不能定义其他函数

有没有办法在TypeScript中实现这一点

为什么不呢。因为它可以在普通JavaScript中完成,所以它也可以在TypeScript中轻松实现。与函数一样,作用域是我们方法的关键词。 当然,构造函数会被误用,就像闭包一样,而不会创建通过typeof操作符响应容器的类型。这样一个工厂函数将只返回另一个函数,然后该函数将用作构造函数封闭初始值的getter/setter

打字脚本示例

class Container {

    constructor(storageValue: any)  {
        return (function (value: any) {

            if (arguments.length !== 0) {
                storageValue = value;
            }
            return storageValue;
        });
    }
}
。。。在纯JavaScript中

var Container = (function ContainerClass () {

    var Constructor = (function Container (storageValue) {
        return (function (value) {

            if (arguments.length !== 0) {
                storageValue = value;
            }
            return storageValue;
        });
    });
    return Constructor;

}());

var a = new Container(24);

console.log("a() : ", a());   // 24
console.log("a(4) : ", a(4)); //  4
console.log("a() : ", a());   //  4

var b = new Container(72);

console.log("b() : ", b());   // 72
console.log("b(5) : ", b(5)); //  5
console.log("b() : ", b());   //  5

console.log("a() : ", a());   //  4
有没有办法在TypeScript中实现这一点

为什么不呢。因为它可以在普通JavaScript中完成,所以它也可以在TypeScript中轻松实现。与函数一样,作用域是我们方法的关键词。 当然,构造函数会被误用,就像闭包一样,而不会创建通过typeof操作符响应容器的类型。这样一个工厂函数将只返回另一个函数,然后该函数将用作构造函数封闭初始值的getter/setter

打字脚本示例

class Container {

    constructor(storageValue: any)  {
        return (function (value: any) {

            if (arguments.length !== 0) {
                storageValue = value;
            }
            return storageValue;
        });
    }
}
。。。在纯JavaScript中

var Container = (function ContainerClass () {

    var Constructor = (function Container (storageValue) {
        return (function (value) {

            if (arguments.length !== 0) {
                storageValue = value;
            }
            return storageValue;
        });
    });
    return Constructor;

}());

var a = new Container(24);

console.log("a() : ", a());   // 24
console.log("a(4) : ", a(4)); //  4
console.log("a() : ", a());   //  4

var b = new Container(72);

console.log("b() : ", b());   // 72
console.log("b(5) : ", b(5)); //  5
console.log("b() : ", b());   //  5

console.log("a() : ", a());   //  4

而不是如果未定义_值!==价值{使用参数可能更好。length==0,因为a和aundefined是两个不同的东西。它不是类型安全的。如果在任何地方都放置TypeScript,则使用TypeScript是没有意义的。我让OP决定将要存储在容器中的类型。在给定的示例中,可以假定为Number,而不是if undeinED_值!==值{使用参数可能更好。长度===0,因为a和aundefined是两个不同的东西。它不是类型安全的。如果在任何地方都放上TypeScript,那么使用TypeScript是没有意义的。我让OP决定将要存储在容器中的类型。在给定的示例中,可以假设一个数字。确实,有我没有真正的操作重载,但你仍然可以做一些类似于操作重载的事情(当然是有限的)。确实没有真正的操作重载,但你仍然可以做一些类似于操作重载的事情(当然是有限的)。听起来像属性的用途。听起来像属性的用途。