CursosEmpresasBlogLiveConfPrecios

Interfaces

Clase 12 de 25 • Curso de TypeScript: Programación Orientada a Objetos y Asincronismo

Clase anteriorSiguiente clase
    Axel Enrique Galeed Gutierrez

    Axel Enrique Galeed Gutierrez

    student•
    hace 4 años

    Les comparto mis apuntes. :D

    Interfaces en clases

    Las interfaces en clases funcionan como contratos, nos permiten tipar tanto los atributos como los métodos.

    Aquí no podemos utilizar encapsulamiento, por defecto todos los atributos y métodos son públicos.

    Implements

    Tiene la misma sintaxis cuando aplicamos herencias en las clases, pero implements no es una herencia, es un contrato que nos dice que nuestra clase tiene que cumplir con un estándar que es la interface.

    Este contrato es tanto como para los parámetros como para los métodos.

    Sintaxis

    interface NameInterface { statements } class NameClass implements NameInterface { constructor ( propertiesOfInterface ) { statements } methodOfInterface (): dataType { statements } }

    Código de la clase

    export interface Driver { database: string; password: string; port: number; conect (): void; disconnect (): void; isConeected (name: string): boolean; } // const driver: Driver = { // database: '', // password: '', // port: 23, // } class PostresDriver implements Driver{ constructor ( public database: string, public password: string, public port: number, ) { } conect (): void {} disconnect (): void {} isConeected (name: string): boolean { return true; } } class Oracle implements Driver { constructor ( public database: string, public password: string, public port: number, ) { } conect (): void {} disconnect (): void {} isConeected (name: string): boolean { return true; } }
    Yuliam Rivera González

    Yuliam Rivera González

    student•
    hace 3 años

    Me encantó que mostrara un ejemplo de la vida real, y no solamente se quedara con los ejemplos tipicos de animales y cosas.

      Jean Bustamante

      Jean Bustamante

      student•
      hace 2 años

      Son horribles los ejemplos de animales y vehículos 😿

    Migdualy Alejandra Gonzalez Martinez

    Migdualy Alejandra Gonzalez Martinez

    student•
    hace 4 años

    Una interfaces se implementan con la palabra reservada implements

    Germán Jabloñski

    Germán Jabloñski

    student•
    hace 3 años

    ¿Por qué usar implements con una interfaz cuando se puede utilizar la herencia de clases?

      Andrés Muñoz

      Andrés Muñoz

      student•
      hace 3 años

      Una de las diferencias es que la interface no define nada acerca de la implementación, lo que da a entender que esta implementación va estar a cargo de cada clase. En cambio usando herencia pueden surgir preguntas como utilizo el método de la clase padre o escribo uno nuevo en la clase hija

      Daniel Camacho

      Daniel Camacho

      student•
      hace 3 años

      por el contrato, basicamente estas en la obligacion de implementar lo que dedfinas en la interfaz, o otra opcion si prefieres trabajar con clases seria extendiendo de una clase abstracta tambien te obliga a implementar esos metodos, lo malo es que no puedes crear instancias de ella, solo a las subclases dentro del arbol de herencia

    Diego Ivan Nacimiento

    Diego Ivan Nacimiento

    student•
    hace 3 años

    Cabe recordar que no siempre se deben utilizar interfaces para las clases, sino solo cuando sean convenientes, que son los casos en los que vamos a tener varias clases que van a compartir unas mismas propiedades y/o métodos La idea es tener una interfaz para varias clases y no una interfaz para cada clase

    Christian Valenzuela

    Christian Valenzuela

    student•
    hace 3 años

    Es increible que se muestren ejemplos de la vida real, es muy util ya que asi nos ayuda a implementar este tipo de cuestiones

    Migdualy Alejandra Gonzalez Martinez

    Migdualy Alejandra Gonzalez Martinez

    student•
    hace 4 años

    No es una herencia, es un estandar que se debe cumplir porque previamente ya fue definido

    Miguel Angel Reyes Moreno

    Miguel Angel Reyes Moreno

    student•
    hace 3 años

    Podemos usar las interfaces como 'contratos' para que las clases cumplan una serie de requisitos.

    William Cortes

    William Cortes

    student•
    hace 3 años

    En VScode puedes colcar el cursor sobre el nombre de la clase, en la parte superior izquierda sobre la palabra class, sale un ícono(como un bombilllito) que al clickearlo te despliega un menú, si selecionas: -Inplements Interface 'NameInterface'.... le agrega a nuestra clase con todos los atributos de la interface

    fabio andres zamora osorio

    fabio andres zamora osorio

    student•
    hace 3 años

    Esto aprendiendo poo en typescript y quisiera saber cual es el beneficio de crear interfaces e implementarlas en una clase ya que el codigo de la interface se repite en la clase la unica diferencia es que en la clase los metodos tienen implementacion, osea,¿no seria mas simple crear una clase con todos los metodos y atributos de las interfaces y no crear las interfaces?

      Edson Lazo

      Edson Lazo

      student•
      hace 3 años

      Hola Fabio, La idea de utilizar una interfaz, es poder definir un comportamiento estandarizado para distintos objetos. Para continuar el ejemplo del profesor, digamos que nosotros tenemos un método que nos trae el driver de la base de datos de acuerdo a una variable de entorno, nosotros no sabemos exactamente cual de las clases nos traerá este método, pero si sabemos que devolverá un objeto con la interfaz 'Driver', a continuación detallo este metodo:

      function getConnectionFromConfig(): Driver{ let connectionType: string = process.env.CONECTION_TYPE; if(connectionType == 'ORACLE'){ return new OracleDriver('database', 'password', 20); }else{ return new PostgresDriver('database', 'password', 20, 100); } }

      Como puedes ver, este método devolverá el driver de Oracle si la variable de entorno 'CONECTION_TYPE' es igual 'ORACLE' y en caso de no serlo devolverá el driver de Postgres.

      Esto no supondra ningun problema para nosotros, ya que sabemos que este metodo devuelve un objeto con la interfaz driver, por lo que podemos simplemente llamar a los metodos del objeto que devuelve el metodo, de la siguiente forma:

      let databaseConnection: Driver = getConnectionFromConfig(); databaseConnection.connect(); databaseConnection.disconnect();

      De esta manera nosotros podemos intercambiar el driver, solo con cambiar la variable de entorno CONECTION_TYPE sin cambiar ni una linea de codigo.

      Este es solo un ejemplo, pero usar interfaces tiene muchas ventajas. te recomiendo leer este post de stack overflow donde dan varios ejemplos de usos de interfaces y su utilidad.

      • https://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces

      Saludos!

    Víctor Andrés Córdova Poma

    Víctor Andrés Córdova Poma

    student•
    hace 4 años

    Se puede tener atributos o métodos de tipo private o protected implementando una interface? Lo digo porque al intentarlo me sale error, y me dice que la interface no tiene esa propiedad o método en la interface de tipo private o protected. Sin embargo, al colocar el tipo dentro de la interface me sale error, ya que no puede ser colocado en la interface.

      Víctor Andrés Córdova Poma

      Víctor Andrés Córdova Poma

      student•
      hace 4 años

      Al parecer solo se puede resolver ese problema usando clases abstractas.

      abstract class Base { protected abstract getName(name: string): string; protected abstract height: number; } class Derived extends Base { constructor ( protected height: number = 5, ) { super(); } protected getName(name: string) { return "world" + name; } }
      Daniel Camacho

      Daniel Camacho

      student•
      hace 3 años

      normalmente los metodos en las interfacces el modificador no va private, ya que se espera que la implementacion la hagan en otro archivo,en su mayoria son publicos ya que se crean con la finalidad de que lo implementen varios paquetes de clases o por fuera de arboles de herencia, por eso no es usual definirlo como protected o private, existe un modificador default que te permite ahcer la implementacion en el mismo, pero no se en ts como seria

    Eduardo Robles

    Eduardo Robles

    student•
    hace 4 años

    hay manera de implementar interfaces en clases hechas con funciones?

    Jesús Patricio Pereira Matus

    Jesús Patricio Pereira Matus

    student•
    hace 3 meses

    las interfaces es como dijo nico, un contrato, da igual como lo implementen pero deben tenerlo en caso de que una interfaz tenga un metodo da igual como lo implementes en otra clase pero debe tenerlo si o si

      Jesús Patricio Pereira Matus

      Jesús Patricio Pereira Matus

      student•
      hace 3 meses

      si quieren ver este paradigma al 100 les recomiendo ver java porque ahi se explica mejor con los diagramas UML entre otras cosas

    David Cardenas Guzman

    David Cardenas Guzman

    student•
    hace 3 años

    Por qué es necesario colocar los {} para el constructor de manera obligatoria en este caso?

      Paola Alapizco

      Paola Alapizco

      student•
      hace 2 años

      Hola David. El constructor es una función especial de las clases, y su sintaxis es igual a cualquier otra función.

      • Tiene un nombre constructor
      • Tiene parámetros (o no): (params)
      • Tiene un cuerpo {}

      .

      El constructor al ser una función debe seguir la sintaxis del lenguaje, por lo tanto si o si debe llevar las llaves { } a pesar de que el cuerpo este vacío. .

      :writing_hand: En las clases la palabra recercada function no se coloca antes del nombre.

    John Carlos Espitia Rivera

    John Carlos Espitia Rivera

    student•
    hace 2 años

    Cuando defines una interface puedes definir métodos y atributos protected o solo public? Entiendo que private no es valido pero protected parece una definición válida

      Adriana Paredes Salinas

      Adriana Paredes Salinas

      student•
      hace 2 años

      En TypeScript, las interfaces solo pueden definir miembros públicos (public). No es posible definir miembros protegidos (protected) o privados (private) en una interfaz. Esto se debe a que las interfaces en TypeScript se utilizan principalmente para especificar la forma (forma o estructura) de los objetos y no para encapsular datos o definir detalles de implementación.

    Manuel Calle Pérez

    Manuel Calle Pérez

    student•
    hace 3 años

    Alguien sabe en que curso utilizan typeorm q el profesor lo menciona. Gracias

      Brahyan Antonio Martinez Madera

      Brahyan Antonio Martinez Madera

      student•
      hace 3 años

      En el curso de nestjs

      Juan Castro

      Juan Castro

      teacher•
      hace 2 años

      https://platzi.com/cursos/nestjs-typeorm/

    fabio andres zamora osorio

    fabio andres zamora osorio

    student•
    hace 3 años

    Haciendo pruebas me di cuenta de que en typescript una clase puede implementar multiples interfaces, entonces tuve una duda ¿si una clase implementa una interface1 y una interface2 donde ambas tienen el mismo nombre y tipos en un metodo, entonces, al crear la implementacion de dicho metodo en la clase cual metodo se esta implementando el de la interface1 o el de la interface2?

    Ronaldo Delgado

    Ronaldo Delgado

    student•
    hace 2 años

    excelente implementar interfaces para nuestros proyectos así todo será mas robusto

    Kevin Daniel Guzman Delgadillo

    Kevin Daniel Guzman Delgadillo

    student•
    hace 2 años

    Las Interfaces de Typescript tiene su pero y es el siguiente: Cuando estas implementando algo de arquitectura de software (usando patrones de diseño, en específico singleton), tu no puedes defir la interface cómo tipo de dato esperado al injectar tu servicio, ya que al transpilarse a javascript, Typescript no interpreta la interface cómo un valor válido.

    Miguel Angel Hernandez Colombo

    Miguel Angel Hernandez Colombo

    student•
    hace 3 años

    no entiendo :(

      Rodrigo Ramos Xochiteotzin

      Rodrigo Ramos Xochiteotzin

      student•
      hace 3 años

      ¿qué es lo que no te queda claro, compañero?

Escuelas

  • Desarrollo Web
  • English Academy
  • Marketing Digital
  • Inteligencia Artificial y Data Science
  • Ciberseguridad
  • Liderazgo y Habilidades Blandas
  • Diseño de Producto y UX
  • Contenido Audiovisual
  • Desarrollo Móvil
  • Diseño Gráfico y Arte Digital
  • Programación
  • Negocios
  • Blockchain y Web3
  • Recursos Humanos
  • Finanzas e Inversiones
  • Startups
  • Cloud Computing y DevOps

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
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