javascript - Problema de enlace en Typescript
Estoy tratando de portar esta función de prototype a jquery en typescript:
onFailure: function(xhr) {
// Get options
var opts = this;
// Show result
var msgBox = opts.msgBox ? opts.msgBox : opts.client.options.msgBox;
if (msgBox && !opts.onFailure) {
msgBox.showError('Communicatie fout.');
}
// Handle onFailure callback
if (opts.onFailure) {
opts.onFailure.bind(opts.client)(xhr);
}
else if (opts.options && opts.options.onFailure) {
opts.options.onFailure.bind(opts.client)(xhr);
}
// Fire event
opts.client.failureCb.fire('failure');
},
Este es el código portado:
onFailure(xhr){
// Get options
var opts = this;
// Show result
var msgBox = opts.msgBox ? opts.msgBox : opts.client.options.msgBox;
if (msgBox && !opts.onFailure) {
msgBox.showError('Communicatie fout.');
}
// Handle onFailure callback
if (opts.onFailure) {
opts.onFailure(opts.client)(xhr);
}
else if (opts.options && opts.options.onFailure) {
opts.options.onFailure.bind(opts.client)(xhr);
}
// Fire event
opts.client.failureCb.fire('failure');
}
Como ves, no es muy diferente. El problema, sin embargo, viene del compilador de TypeScript:
error TS2094: La propiedad 'bind' no existe en el valor de tipo 'null'
¿Cómo debería trasladarse esto correctamente a jQuery?
Gracias.
Respuesta #1
La única razón por la que eso sucedería es porque TypeScript ha inferido el tipo basándose en lo que escribiste:
var opts = {
options:{
onFailure: null
}
}
// The property 'bind' does not exist on value of type 'null'
opts.options.onFailure.bind();
Puedes sobrescribir este comportamiento escribiendo explícitamente la variable como any:
var opts:any = {
options:{
onFailure: null
}
}
// no more error
opts.options.onFailure.bind();
Esto eliminará el error de compilación, pero sospecho que este error de compilación podría estar señalando un error lógico válido en tu código.
