CursosEmpresasBlogLiveConfPrecios

Extensión de interfaces

Clase 23 de 32 • Curso de TypeScript 3

Clase anteriorSiguiente clase

Contenido del curso

Introducción a TypeScript

  • 1
    El lenguaje de programación TypeScript

    El lenguaje de programación TypeScript

    08:43 min
  • 2
    Instalación de herramientas para TypeScript

    Instalación de herramientas para TypeScript

    05:47 min
  • 3

    Instalación de herramientas en Windows

    01:05 min
  • 4
    Navegación y refactorización

    Navegación y refactorización

    04:37 min

Entorno de Desarrollo

  • 5
    El compilador de TypeScript

    El compilador de TypeScript

    08:00 min
  • 6
    El archivo de configuración de TypeScript

    El archivo de configuración de TypeScript

    07:22 min
  • 7
    Mi primer proyecto TypeScript

    Mi primer proyecto TypeScript

    05:09 min

Tipos en TypeScript

  • 8
    Tipado en TypeScript

    Tipado en TypeScript

    01:37 min
  • 9
    Number, Boolean y String

    Number, Boolean y String

    14:09 min
  • 10
    Any

    Any

    08:28 min
  • 11
    Void y never

    Void y never

    15:58 min
  • 12
    null y undefined

    null y undefined

    11:03 min
  • 13
    Object

    Object

    07:44 min
  • 14
    Array

    Array

    09:44 min
  • 15
    Tupla

    Tupla

    11:25 min
  • 16
    Enum

    Enum

    10:59 min
  • 17
    Unión de Tipos, Alias y Tipos Literales

    Unión de Tipos, Alias y Tipos Literales

    11:58 min
  • 18
    Aserciones de tipo

    Aserciones de tipo

    11:26 min
  • 19
    Funciones en TypeScript

    Funciones en TypeScript

    14:19 min
  • 20
    Resumen

    Resumen

    06:54 min

Tipos Personalizados

  • 21
    Interfaces

    Interfaces

    10:18 min
  • 22
    Interfaces: propiedades opcionales

    Interfaces: propiedades opcionales

    10:57 min
  • 23
    Extensión de interfaces

    Extensión de interfaces

    Viendo ahora
  • 24
    Clases

    Clases

    14:02 min
  • 25
    Clases públicas y privadas

    Clases públicas y privadas

    15:10 min
  • 26
    Métodos Get y Set

    Métodos Get y Set

    08:46 min
  • 27
    Herencia de clases y propiedades estáticas

    Herencia de clases y propiedades estáticas

    17:41 min
  • 28
    Resumen

    Resumen

    13:24 min

Módulos

  • 29
    Principios de responsabilidad única

    Principios de responsabilidad única

    15:03 min
  • 30
    Resolviendo módulos

    Resolviendo módulos

    10:04 min
  • 31
    Webpack y agrupación de Módulos

    Webpack y agrupación de Módulos

    14:02 min

Cierre

  • 32
    Cierre

    Cierre

    00:57 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Luis Abdel Rangel Castro

      Luis Abdel Rangel Castro

      student•
      hace 5 años
        Samuel Zanón

        Samuel Zanón

        student•
        hace 5 años
        Miguel Angel Reyes Moreno

        Miguel Angel Reyes Moreno

        student•
        hace 5 años
      Jose Daniel Barría Reyes

      Jose Daniel Barría Reyes

      student•
      hace 6 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
        Luis Angel

        Luis Angel

        student•
        hace 4 años
      Boris Vargas Paucara

      Boris Vargas Paucara

      student•
      hace 6 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      student•
      hace 5 años
      Jose Cortes Jaramillo

      Jose Cortes Jaramillo

      student•
      hace 5 años
        Edgar López Rangel

        Edgar López Rangel

        student•
        hace 5 años
        Jorge Cruz Perez

        Jorge Cruz Perez

        student•
        hace 5 años
      Henry Villavicencio

      Henry Villavicencio

      student•
      hace 5 años
        Alberto Camarena

        Alberto Camarena

        student•
        hace 5 años
        Ariel Claudio Sitta

        Ariel Claudio Sitta

        student•
        hace 4 años
      Marcia Castro Moya

      Marcia Castro Moya

      student•
      hace 5 años
        Nixon Martinez

        Nixon Martinez

        student•
        hace 5 años
        Yamid Vélez Muñoz

        Yamid Vélez Muñoz

        student•
        hace 5 años
      Jorge Cruz Perez

      Jorge Cruz Perez

      student•
      hace 5 años
        Rafael Aguero Baez

        Rafael Aguero Baez

        student•
        hace 4 años
      yerson lasso

      yerson lasso

      student•
      hace 5 años
      Alejandro Barrios

      Alejandro Barrios

      student•
      hace 5 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      Juan Jiménez

      Juan Jiménez

      student•
      hace 5 años
      Gustavo Gonzalez Montero

      Gustavo Gonzalez Montero

      student•
      hace 4 años
        Irving Juárez

        Irving Juárez

        student•
        hace 4 años
      Darwin Rodríguez

      Darwin Rodríguez

      student•
      hace 5 años
        David Prieto Cornejo

        David Prieto Cornejo

        student•
        hace 5 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      Jose Manuel Montaño Saenz

      Jose Manuel Montaño Saenz

      student•
      hace 4 años
        Jose Manuel Montaño Saenz

        Jose Manuel Montaño Saenz

        student•
        hace 4 años
      Sergio Orejarena Rueda

      Sergio Orejarena Rueda

      student•
      hace 4 años
      Juan Chavez Cornejo

      Juan Chavez Cornejo

      student•
      hace 4 años
      Juan Chavez Cornejo

      Juan Chavez Cornejo

      student•
      hace 4 años
      Hector Rubi Garcia

      Hector Rubi Garcia

      student•
      hace 5 años
        Gerson Zuñiga

        Gerson Zuñiga

        student•
        hace 5 años
        Alberto Camarena

        Alberto Camarena

        student•
        hace 5 años
      Mauricio Galvez

      Mauricio Galvez

      student•
      hace 4 años
      Moisés Manuel Morín Hevia

      Moisés Manuel Morín Hevia

      student•
      hace 5 años

      3 Ways to Clone Objects in JavaScript

      Because objects in JavaScript are references values, you can't simply just copy using the =. But no worries, here are 3 ways for you to clone an object

      const food = { beef: '🥩', bacon: '🥓' } // "Spread" { ...food } // "Object.assign" Object.assign({}, food) // "JSON" JSON.parse(JSON.stringify(food)) // RESULT: // { beef: '🥩', bacon: '🥓' }

      if you're using "lodash" one of the most used libraries, you can simply use "cloneDeep"

      Si estás usando "Lodash" una de las librerías más usadas, puedes usar simplemente clonedeep.

      var cloned = _.cloneDeep(objects);

      I think the most used now is the spread operator

      Extendiendo Interfaces. Las interfaces pueden extenderse unas de otras. Esto permite copiar los miembros ya definidos en una interfaz a otra, ganando flexibilidad y reusabilidad de componentes. Utilizamos la palabra reservada extends para utilizar herencia.

      interface Person { name:string; lastname:string; } interface Student extends Person { person:Person }

      Muy bien ! Muchas graicas.

      Más que extenderse ("extends", en inglés), lo que permiten más precisamente las interfaces en TypeScript es lo que español y en Programación Orientada a Objetos (POO) se conoce como "herencia". Bajo este mecanismo, las interfaces pueden "heredar" propiedades de otras interfaces, lo cual nos ayuda a no tener que repetir el mismo código que varias interfaces que hemos definido podrían compartir y además facilita el mantenimiento del mismo código a futuro.

      export {} enum PhotoOrientation { Landscape, Portrait, Square, Panorama } interface Entity { id: number; title: string; } interface Album extends Entity { // copia de los atributos de Entity // id: number; // titulo: string; descripcion: string; } interface Picture extends Entity{ orientation: PhotoOrientation } const album: Album = { id: 1, title: 'Meetups', descripcion: 'Community events around the world' }; const picture: Picture = { id: 1, title: 'Family', orientation: PhotoOrientation.Landscape }; let newPicture = {} as Picture; newPicture.id = 2; newPicture.title = 'Moon'; console.log('album : ', album); console.log('picture : ', picture); console.log('newPicture : ', newPicture);

      Buen código !

      Extensión de interfaces

      La herencia es un mecanismo para poder reutilzar código dentro de la programación orientada a objetos. TS provee esto con las interfaces. Las interfaces pueden extenderse de otras. Esto permite copiar los miembros ya definidos en una interfaz a otra, ganando flexibilidad y reusabilidad de componentes.

      export {} enum PhotoOrientation{ Landscape, Portrait, Square, Panorama } //*Herencia de interfaces interface Entity { id: number, title: string, } interface Album extends Entity{ //*Copia de los atributos de Entity description: string } interface Picture extends Entity { orientation: PhotoOrientation } const album: Album = { id: 5, title: 'Meetups', description: 'Community events around the world' } const picture: Picture = { id: 10, title: 'Family', orientation: PhotoOrientation.Square } let newPicture = {} as Picture newPicture.id = 2 newPicture.title = 'Moon' console.table({album}) console.table({picture}) console.table({newPicture})

      Cuál es la diferencia entre asignar el tipo a una variable con ':' y con 'as', ejemplo. let picture: Picture; let picture = { } as Picture;

      En uno va a tipar la variable y en el otro va a hacer una aserción.

      Significa que en el primero va a "exigir" que la variable tenga la estructura del tipo mientras que en la segunda vas a declarar un objeto (puede ser un objeto vacio como en tu ejemplo) y te va a permitir tratar a la variable como el tipo que definas (aún cuando el objeto esté vacio)

      Interesante pregunta, encontre este link JSX support, espero sea de ayuda, saludos :)

      Podrián ayudarme con esta duda. Según yo ambas lineas de código son equivalentes. ¿Por qué en el segundo caso me marca error ?

      let newPicture = {} as Picture; // let newPicture: Picture ={};

      Hola Henry 👋🏼, yo tengo entendido que no son equivalentes, ya que en la primera línea se le asigna un tipo {}(Object) a la variable newPicture de primera instancia y ya después le dices a TS que confíe en ti y lo considere como una interfaz llamada Picture, por eso no te marca ningún error. Y para el caso del segundo desde un principio le dices que su tipo es la interfaz Picture y por eso el error que te marca es un "missing properties", ya que debes cumplir con el contrato.

      Muchas gracias, Alberto. Yo tmb tenia la misma duda

      No entiendo cuándo puedes utilizar let o const para definir variables

      puedes usar let para declarar una variable de scope o ámbito global y puedes reasignar su valor, con const declaras unan función que también puede ser global, no la puedes reasignar pero si mutarla, esto significa que puedes extender sus características o propiedades.

      En javascript definir una variable con const es por que su valor no va a cambiar (hay excepcion cuando el valor es un array u objeto) de lo contrario se debe declarar con let

      Ejemplo:

      const paisNacimiento = 'Colombia'; //Tu pais de nacimiento nunca va a cambiar, siempre sera el mismo let cantidadGatos = 2; //La cantidad de gatos puede aumentar o disminuir

      De que dependio que en la salida por consola album tenia saltos de linea y picture y newPicture no los tenia?

      Lo que pasó ahí fue simplemente la consola. Esto ocurre debido a que cuando imprime un objeto con muchas propiedades empieza a incluir saltos de líneas en las propiedades para que sea más legible, pero cuando es pequeño no lo hace porque los objetos pequeños son fácil de leer.

      Tengo que decir que tenía la duda de enq ue se diferenciaban "type" y "interface" a parte de su sintaxis, pero este tema de herencias soluciono mi duda, me habría gustado que se especificara desde un poco antes igual

      Dentro de una interface, también pueden usar otra interface para definir como serán los elementos dentro de un objeto, por ejemplo un array de objetos.

      interface Photo extends Entity { orientation: PhotoOrientation; } interface Album extends Entity { description: string; photos: Photo[] // recibe un array de objetos con las propiedades de la interface Photo } const album: Album = { id: 1, title: 'Meetups', description: 'Community events around the world', photos: [{ id: 1, title: 'Test Photo', orientation: PhotoOrientation.Portrait }, { id: 2, title: 'Another Test Photo', orientation: PhotoOrientation.Landscape }] } album.photos.push('test'); // Error! Solo puede recibir objetos con la estructura de la interface Photo

      Thanks.

      export {}; enum PhotoOrientation { Landscape, Portrait, Square, Panorama } interface Entity { id: number; title: string; } interface Album extends Entity { // copia de los atributos de Entity description: string; } interface Picture extends Entity { orientation: PhotoOrientation } const album: Album = { id: 1, title: 'Meetups', description: 'Community events around the world' }; const picture: Picture = { id: 1, title: 'Family', orientation: PhotoOrientation.Landscape }; let newPicture = {} as Picture; newPicture.id = 2; newPicture.title = 'Moon'; console.log('album', album); console.log('picture', picture); console.log('newPicture', newPicture);

      Se puede desactivar la declaración de variables con 'as' o aserción en typescript?

      Si se puede, te vas a tu archivo de configuracion y colocas lo siguiente:

      { rules: { "no-angle-bracket-type-assertion": true } }

      A lo mejor se me está pasando por alto algo pero no entiendo por qué newPicture no da error si no se definió el atributo orientation?

      Porque esta definido como una aserción de tipos (as) y por tanto el compilador trata a newPicture como si fuera de ese tipo pero "no le exije" que cumpla con el contrato de la Interfaz, es más flexible.

      Justo me salto esta duda, la respuesta es por el as ya que no marcará error porque solamente le estas diciendo que es de tal tipo pero no que es ese tipado obligatorio.

      ¿Por que newPicture no marca error por la propiedad orientation de Picture?

      interface Entity { id: number; title: string; } interface Picture extends Entity { orientation: PhotoOrientation; // Esta propiedad por que se omite? } let newPicture = {} as Picture; newPicture.id = 2; newPicture.title = 'Moon'; // Salida newPicture: { id: 2, title: 'Moon' }

      Sabemos que newPicture toma el contrato que Picture ha creado, ¿Tiene algo que ver la aserción?

      Nota: primero leer las preguntas del curso antes de preguntar.

      Respuesta

      Al declarar la variable newPicture hacemos una aserción de tipo indicandole a TypeScript que esa variable debe ser de tipo Picture pero no es obligatorio que contenga todas las propiedades. gajes del oficio.

      Un pequeño ejemplo en otro contexto de lo que hemos trabajado.

      carbon.png

      Para clonar Objetos en JavaScript o en otros lenguajes en general, les recomiendo revisar conceptos como shallow copy y deep copy. https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy

      Para clonar Objetos en JavaScript o en otros lenguajes en general, les recomiendo revisar conceptos como shallow copy y deep copy. https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy

      Me parece interesante que cuando creamos un objeto de tipo Picture el compilado pide que agreguemos los elementos establecidos en la interfaz.

      Capture1.PNG
      . El profesor utiliza la aserción de tipos con la sintaxis as

      let newPicture = {} as Picture

      Si imprimimos el valor de la variable newPicture para ver lo que tiene, sale un objeto vacío.

      console.log('newPicture 1', newPicture)
      Capture2.PNG

      parece que newPicture violó el contrato 🤔

      Hola hola, un compañero en un cometario arriba tenía una duda similar y lo que yo le explicaba es que en el caso de la aserción a la variable newPicture se le asigna un tipo {}(Object) de primera instancia y ya después se le dice a TS que confíe y lo considere como una interfaz llamada Picture, por eso no marca ningún error ni “viola el contrato”. Y para el caso de la asignación explícita del tipo interfaz Picture desde su declaración requiere los atributos, es por eso que marca el error “missing properties”, ya que ahí si se incumple el contrato.

      Al declarar una variable de esta forma:

      let variable: number = 2;

      Estás diciendo que ese espacio de memoria solo puede almacenar valores de tipo number. . Al hacerlo de esta otra forma (aserción):

      let variable = 2 as number;

      Estás diciendo que el valor (2) que se le está asignando a la variable es de tipo number, pero la variable puede contener cualquier otro tipo de dato. Es solo para ser más explícito y tener autocompletado, realmente no estas tipando la variable, solo estás declarando de que tipo es el dato que le estás asignando en ese momento.

      Herencia Extención de interfaces, Los miembros definidos a una interfaz pueden ser copiados para flexibilidad y ahorro de componentes. interface NameObj extends NameObj. Cambiar el estado de los objetos.