Un problema específico solucionado fue el desajuste de la declaración de la función. Me pregunto, en mi caso específico, cuál es la diferencia entre
const obj => { thing1: () => void //This is type thing1: () => undefined thing2(){ return; } //This is type thing2(): void };No veo ninguna diferencia entre los dos. Uno es un atributo de objeto que contiene una función lambda y el otro es una función declarada en el objeto. ¿Por qué son de diferentes tipos?
Su código de ejemplo no es válido, pero voy a asumir que quiso decir esto:
const obj = { thing1: () => undefined, thing2() { return }, }; El tipo de thing1 es:
(property) thing1: () => undefined Esta es una propiedad de obj que tiene el valor de una función. Esa función es una función de flecha que devuelve undefined . Las funciones de flecha capturan el valor de this desde el ámbito de declaración. Entonces this podría ser cualquier cosa, desde el tipo solo no se puede decir. Sin embargo, lo que esto le dice es que no necesita preocuparse por el valor de this , ya que está vinculado a la declaración de la función. Esto significa que podría interrumpirlo y pasarlo como una devolución de llamada como:
obj.thing1() // `this` is whatever `this` was when the function was declared. const fn = obj.thing1 fn() // `this` is whatever `this` was when the function was declared. thing2 se escribe como:
(method) thing2(): void En este caso, thing2 es un método de obj que devuelve un valor que no debe usarse. En realidad, no está undefined , pero en lo que respecta al tipo, devuelve un valor de retorno inutilizable.
Y aquí this no está limitado para usted, y en su lugar se establece llamando a la sintaxis:
obj.thing2() // ^ this dot sets the value of `this` in `thing2()`.Si tuviera que hacer la misma prueba anterior aquí:
obj.thing2() // `this` is `obj` const fn = obj.thing2 fn() // `this` the global object, which is probably not good.