Pesquisa de site

javascript - Como criar uma função em uma classe que não vá para a função prototipada em TypeScript?


Quando eu crio uma função dentro da classe, o compilador TS faz com que essa função seja uma função prototipada, por exemplo.

class MyClass {
    getExample()
    {

    }
}

o resultante é

var MyClass = (function() {
    function MyClass() {}
    MyClass.prototype.getExample = function() {};
    return MyClass;
})();

mas o que eu preciso é

function MyClass() {

    this.getExample = function() {

    }
}

é possível obter uma função assim?

Resposta #1

Dê uma olhada neste link do JQFAQ.com, aqui está a resposta para a sua pergunta 'Como criar uma função em uma classe que não vá para a função prototipada no TypeScript?', e há mais perguntas frequentes disponíveis.

Resposta #2

Eu dei uma olhada no TypeScript (como o playground online... mas prefiro escrever meu próprio JS :P)
Pelo que eu posso perceber, o que você quer fazer pode ser feito com bastante facilidade, eu mesmo tentei algumas coisas e isso funcionou como um charme para mim:

class Greeter {
    greeting: string;
    closureMethod;
    constructor (message: string) {
        this.greeting = message;
        var that = this;
        var closureMethod = function()
        {
            console.log(that.greeting);
        };
        this.closureMethod = closureMethod;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   
var greeter = new Greeter("world");
var another = new Greeter('Foobar');
var button = document.createElement('button');
button.innerText = "Say Hello";
button.onclick = function()
{
    greeter.closureMethod();
    another.closureMethod();
}
document.body.appendChild(button)

O que funcionou, mas ainda mais curto (e isso também funciona)

class Greeter {
    greeting: string;
    closureMethod;//define property here, no type
    constructor (message: string) {
        this.greeting = message;
        var that = this;
        this.closureMethod = function()
        {
            console.log(that.greeting);
        };
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   

Ambos produzem o mesmo resultado: um construtor que define um método repetidamente, para cada nova instância (o que, honestamente, não é uma boa ideia).
Como você pode ver, ele acessa a instância usando that, em vez de this, que é o único ponto positivo de criar o mesmo método repetidamente... desde que você tenha um bom motivo para isso. Mas eu não vou me estender em um discurso sobre isso.
O código acima funciona, ele gera uma função construtora como a que você queria.