diff --git a/TypeScript/deno.json b/TypeScript/deno.json index 90f6af3..f4c2d3f 100644 --- a/TypeScript/deno.json +++ b/TypeScript/deno.json @@ -1,5 +1,8 @@ { "lock": false, + "compilerOptions": { + "noImplicitThis": true + }, "imports": { "@std/assert": "jsr:@std/assert" } diff --git a/TypeScript/main.ts b/TypeScript/main.ts index 34e4a7d..ecd27bc 100644 --- a/TypeScript/main.ts +++ b/TypeScript/main.ts @@ -1,3 +1,48 @@ +/*************************************************************** ThisType **************************************************************/ +/** + * Ejemplo de uso de `ThisType` en TypeScript para definir el tipo de `this` en métodos de un objeto. + * + * `ThisType` es una utilidad de TypeScript que permite especificar explícitamente el tipo del contexto `this` + * dentro de los métodos de un objeto. Es útil en objetos literales, mixins, o frameworks como Vue.js, donde + * los métodos necesitan acceder a otras propiedades o métodos del mismo objeto. + * + * **Requisitos**: + * - La opción `--noImplicitThis` debe estar habilitada en `tsconfig.json` para evitar que `this` sea inferido como `any`. + */ +interface Counter { + /** El valor actual del contador */ + amount: number; + /** Incrementa el valor del contador en 1 */ + inc: () => void; + /** Decrementa el valor del contador en 1 */ + dec: () => void; +} + +/** + * Tipo que combina la interfaz `Counter` con `ThisType` para tipar el contexto `this`. + */ +type CounterWithThis = Counter & ThisType; + +/** + * Implementación del objeto contador. + * Los métodos `inc` y `dec` usan `this` para modificar la propiedad `amount`. + * Gracias a `ThisType`, TypeScript valida correctamente el acceso a `amount`. + */ +const counter: CounterWithThis = { + amount: 0, + inc() { + this.amount++; + }, + dec() { + this.amount--; + }, +}; + +counter.inc(); +counter.dec(); +console.log(counter.amount); +/***************************************************************** End ThisType **************************************************************/ + function main() { /** Here we will write new things learned from TypeScript with basic examples */ }