Estoy tratando de implementar algo similar a la función let scope de kotlin en TypeScript.
Mi enfoque actual es usar la fusión de declaraciones con la interfaz de Object . Lo que generalmente funciona, pero me falta la información de tipo del argumento para el método interno (vea el ejemplo a continuación).
¿Hay alguna manera de inferir el tipo de Objeto donde se invocó la función?
interface Object { let: <S>(block: <T = this>(thisVal: T) => S) => S | null } Object.prototype.let = function <T, S>(block: (thisVal: T) => S): S | null { return this != null ? block(this as T) : null } const a = {foo: 42} // don't want to write this -> 'a.let<typeof a>(it => console.log(it.foo));' a.let(it => console.log(it.foo)); // type of 'it' is T = ObjectPuede hacer esto agregando un parámetro this a la función let y capturar this desde la llamada let :
interface Object { let: <S, T>(this: T, block: (thisVal: T) => S) => S | null } Object.prototype.let = function <S, T>(this: T, block: (thisVal: T) => S): S | null { return this != null ? block(this as T) : null } const a = {foo: 42} a.let(it => console.log(it.foo));