search
CursosEmpresasBlogLiveConfPrecios
Curso de TypeScript: Programación Orientada a Objetos y Asincronismo

Interfaces

Curso de TypeScript: Programación Orientada a Objetos y Asincronismo

Contenido del curso

Introducción

  • 1
    ¿Ya tomaste el Curso de TypeScript: Tipos Avanzados y Funciones?

    ¿Ya tomaste el Curso de TypeScript: Tipos Avanzados y Funciones?

    05:16 min

Fundamentos de POO

  • 2
    Class

    Class

    12:19 min
  • 3
    Métodos

    Métodos

    08:44 min
  • 4
    Acceso público

    Acceso público

    05:16 min
  • 5
    Acceso privado

    Acceso privado

    10:20 min
  • 6
    Constructor

    Constructor

    08:00 min
  • 7
    Getters

    Getters

    11:48 min
  • 8
    Setters

    Setters

    07:55 min

POO Avanzada

  • 9
    Herencia

    Herencia

    10:18 min
  • 10
    Acceso protegido

    Acceso protegido

    08:02 min
  • 11
    Static

    Static

    12:01 min
  • 12
    Interfaces

    Interfaces

    Viendo ahora
  • 13
    Clases abstractas

    Clases abstractas

    06:14 min
  • 14
    Singleton: constructor privado

    Singleton: constructor privado

    10:36 min

Asincronismo y consumo de APIs

  • 15
    Promesas

    Promesas

    14:13 min
  • 16
    Tipando respuestas HTTP

    Tipando respuestas HTTP

    11:38 min
  • 17
    Proyecto: migración de funciones a clases

    Proyecto: migración de funciones a clases

    10:05 min
  • 18
    Consumiendo ProductMemoryService

    Consumiendo ProductMemoryService

    06:30 min
  • 19
    ProductHttpService

    ProductHttpService

    15:33 min
  • 20
    Consumiendo ProductHttpService

    Consumiendo ProductHttpService

    09:22 min

Genéricos

  • 21
    Generics

    Generics

    10:22 min
  • 22
    Generics en clases

    Generics en clases

    12:08 min
  • 23
    Generics en métodos

    Generics en métodos

    15:11 min
  • 24
    Decoradores

    Decoradores

    15:05 min

Próximos pasos

  • 25
    ¿Quieres más cursos de TypeScript?

    ¿Quieres más cursos de TypeScript?

    01:20 min
Tomar examen

Interfaces

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

Comentarios23

Axel Enrique Galeed Gutierrez

Axel Enrique Galeed Gutierrez

Estudiante
Hace 4 años
Yuliam Rivera González

Yuliam Rivera González

Estudiante
Hace 3 años
    Jean Bustamante

    Jean Bustamante

    Estudiante
    Hace 3 años
Migdualy Alejandra Gonzalez Martinez

Migdualy Alejandra Gonzalez Martinez

Estudiante
Hace 4 años
Diego Ivan Nacimiento

Diego Ivan Nacimiento

Estudiante
Hace 3 años
Germán Jabloñski

Germán Jabloñski

Estudiante
Hace 4 años
    Andrés Muñoz

    Andrés Muñoz

    Estudiante
    Hace 4 años
    Daniel Camacho

    Daniel Camacho

    Estudiante
    Hace 3 años
Christian Valenzuela

Christian Valenzuela

Estudiante
Hace 3 años
Migdualy Alejandra Gonzalez Martinez

Migdualy Alejandra Gonzalez Martinez

Estudiante
Hace 4 años
Ronaldo Delgado

Ronaldo Delgado

Estudiante
Hace 3 años
Miguel Angel Reyes Moreno

Miguel Angel Reyes Moreno

Estudiante
Hace 4 años
William Cortes

William Cortes

Estudiante
Hace 4 años
Jesús Patricio Pereira Matus

Jesús Patricio Pereira Matus

Estudiante
Hace un año
    Jesús Patricio Pereira Matus

    Jesús Patricio Pereira Matus

    Estudiante
    Hace un año
fabio andres zamora osorio

fabio andres zamora osorio

Estudiante
Hace 4 años
    Edson Lazo

    Edson Lazo

    Estudiante
    Hace 4 años
Víctor Andrés Córdova Poma

Víctor Andrés Córdova Poma

Estudiante
Hace 4 años
    Víctor Andrés Córdova Poma

    Víctor Andrés Córdova Poma

    Estudiante
    Hace 4 años
    Daniel Camacho

    Daniel Camacho

    Estudiante
    Hace 3 años
Eduardo Robles

Eduardo Robles

Estudiante
Hace 4 años
Carlos Alberto De Avila Suro

Carlos Alberto De Avila Suro

Estudiante
Hace 4 meses•editado
David Cardenas Guzman

David Cardenas Guzman

Estudiante
Hace 3 años
    Paola Alapizco

    Paola Alapizco

    Estudiante
    Hace 3 años
John Carlos Espitia Rivera

John Carlos Espitia Rivera

Estudiante
Hace 3 años
    Adriana Paredes Salinas

    Adriana Paredes Salinas

    Estudiante
    Hace 3 años
Manuel Calle Pérez

Manuel Calle Pérez

Estudiante
Hace 4 años
    Brahyan Antonio Martinez Madera

    Brahyan Antonio Martinez Madera

    Estudiante
    Hace 4 años
    Juan Castro

    Juan Castro

    Profesor
    Hace 3 años
fabio andres zamora osorio

fabio andres zamora osorio

Estudiante
Hace 4 años
Kevin Daniel Guzman Delgadillo

Kevin Daniel Guzman Delgadillo

Estudiante
Hace 3 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; } }

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

Son horribles los ejemplos de animales y vehículos 😿

Una interfaces se implementan con la palabra reservada implements

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

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

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

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

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

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

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

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

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

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

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

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?

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!

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.

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

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

hay manera de implementar interfaces en clases hechas con funciones?

Cuando vamos a crear una clase en la que necesitamos que ts nos avise, vele y nos obligue para que dicha clase cuente con una norma, como el tener que contar con una lista de propiedades y métodos, es útil usar interfaces. son como un contrato que obliga a la clase a implementar los requisitos estipulados en la interface

Hasta hoy hemos trabajado las interfases mas o menos como Types

interface Driver{

    database:string;

    password:string;

    port:number;

}

const driver:Driver = {

    database:"",

    password:"",

    port:23

}

Notese que el nombre de la interface empieza con mayuscula.

Para implementas la interface, usamos la palabra implements al definir la clase

class PostgresDriver implements Driver{

    constructor(

        public database:string,

        public password:string,

        public port:number){}

}

class OracleDriver implements Driver{

    

}

Y si no incluimos las tres propiedades (database, password y port) estipuladas en la definición de la interface Dirver, obtendremos un error.

Tambien podemos indicar metodos o funciones en la deficnicion de la interface como connect en el siguiente ejemplo:

interface Driver{

    database:string;

    password:string;

    port:number;

    connect():void

}

Solo hemos añadido los parentesis despues del nombre del metodo y como podrás deducir, esto obligare a que cada clase que implemente la interface Driver contenga un método llamado connect

class PostgresDriver implements Driver{

    constructor(

        public database:string,

        public password:string,

        public port:number){}

    connect(){

        console.log("Conectado a la base de datos")

    }

}

Todas las propiedades o metodos definidas en la interface se deben definir como publicos en la clase, si quieres algo privado, eso ya seria una caracteristica propia de la clase que no importa si es que ya cumpliste con lo estipulado en la interface

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

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.

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

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.

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

En el curso de nestjs

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

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?

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.