CursosEmpresasBlogLiveConfPrecios
Curso de TypeScript 3

Herencia de clases y propiedades estáticas

Curso de TypeScript 3

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

    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

    10:54 min
  • 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

    Viendo ahora
  • 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

Herencia de clases y propiedades estáticas

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

      Comentarios35

      Enrique Tecayehuatl

      Enrique Tecayehuatl

      Estudiante
      Hace 6 años
        kevin Jhordy Puscán Ortiz

        kevin Jhordy Puscán Ortiz

        Estudiante
        Hace 6 años
        Juan Carlos Pinzón

        Juan Carlos Pinzón

        Estudiante
        Hace 6 años
      Alejandro Sebastian Dubon Estrada

      Alejandro Sebastian Dubon Estrada

      Estudiante
      Hace 6 años
        Jorge Cruz Perez

        Jorge Cruz Perez

        Estudiante
        Hace 6 años
        Alan Quispe

        Alan Quispe

        Estudiante
        Hace 6 años
      Jose Daniel Barría Reyes

      Jose Daniel Barría Reyes

      Estudiante
      Hace 6 años
      Raul Hernández

      Raul Hernández

      Estudiante
      Hace 5 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        Estudiante
        Hace 5 años
        Diego Fernando Caviedes Camaho

        Diego Fernando Caviedes Camaho

        Estudiante
        Hace 4 años
      ELKIN YESID MORENO VELEZ

      ELKIN YESID MORENO VELEZ

      Estudiante
      Hace 5 años
      Hector Rubi Garcia

      Hector Rubi Garcia

      Estudiante
      Hace 6 años
      Jesús Rubén Esparza Soto

      Jesús Rubén Esparza Soto

      Estudiante
      Hace 6 años
        César Palma

        César Palma

        Estudiante
        Hace 5 años
        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        Estudiante
        Hace 4 años
      silvana murgo

      silvana murgo

      Estudiante
      Hace 6 años
      Camilo

      Camilo

      Estudiante
      Hace 5 años
        Daniel Meza

        Daniel Meza

        Estudiante
        Hace 5 años
        Cristian Blandon

        Cristian Blandon

        Estudiante
        Hace 5 años
      Jorge Méndez Ortega

      Jorge Méndez Ortega

      Estudiante
      Hace 6 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        Estudiante
        Hace 5 años
      Andrés Felipe Eslava Zuluaga

      Andrés Felipe Eslava Zuluaga

      Estudiante
      Hace 6 años
      Sebastian Diaz

      Sebastian Diaz

      Estudiante
      Hace 5 años
      Alex Camacho

      Alex Camacho

      Profesor
      Hace 6 años
      Obed Paz

      Obed Paz

      Estudiante
      Hace 5 años
      Fabian Andres Ramirez Vela

      Fabian Andres Ramirez Vela

      Estudiante
      Hace 5 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        Estudiante
        Hace 5 años
        Anyelo Leonardy Alvarez Baquero

        Anyelo Leonardy Alvarez Baquero

        Estudiante
        Hace 5 años
      Juan Carlos Valencia López

      Juan Carlos Valencia López

      Estudiante
      Hace 6 años
      Laura Roa

      Laura Roa

      Estudiante
      Hace 4 años
      Santiago Mendoza

      Santiago Mendoza

      Estudiante
      Hace 4 años
        Daniel Meza

        Daniel Meza

        Estudiante
        Hace 4 años
      Eduardo Robles

      Eduardo Robles

      Estudiante
      Hace 4 años
        Diego Fernando Caviedes Camaho

        Diego Fernando Caviedes Camaho

        Estudiante
        Hace 4 años
      Armando Alamilla Cuellar

      Armando Alamilla Cuellar

      Estudiante
      Hace 4 años

      Bueno aunque parezca cliché como todos ponen sus comentarios mi resúmen es:

      asbtract: cuando requeires que una clase no sea instanciada protected: atributo de los miembros para que puedan ser accedidos desde su propia clase y también que puedan ser solo accedidos a quienes heredan esa clase con implements(herencia) implements: herencia claseA extends claseB { ... } static: para poder acceder a métodos/propiedades de una clase sin la necesidad de la instancia(new ClaseA()) sino const a = ClaseA.propiedad

      En qué momento utilizó implements? implements no se debería utilzar para implementar interfaces, mas no clases?

      Compañero tu definición de implements es incorrecta, a lo que te refieres es a la herencia con extends

      Nota: Por convención los nombres de las clases siempre deben ir con inicial mayúscula.

      Correcto y seguir la convención UpperCamelCase

      Seria lo ideal pero ni los mismos que diseñan las librerías en JS a veces hacen caso de esto 😒, vengo de Java

      Herencia de clases y miembros protegidos Typescript soporta este patrón común en el mundo de la POO Implementa la habilidad de extender codigo de clases existentes a través de la herencia. Utilizamos la palabra extends para heredar Se heredan solo los atributos public o protected tenemos acceso al constructor de la clase padre super()

      class Person { protected id:number; protected name:string; constructor(id:number, name:string){ } } class Student extends Person { private active:boolean constructor(id:number, name:string, active:boolean){ super(id,name) this.active = active } }

      Clases abstractas: Las clases abstractas son la base de donde otras clases podrian derivarse. A diferencia de una interfaz, una clase abstracta puede implementar funciones para sus instancias. La palabra reservada es abstract

      abstract class myClass{}

      ++Recordar que las clases abstractas no se pueden instanciar++ Propiedades estaticas y de solo lectura Las clases por lo general definen atributos y métodos aplicables a las instancias de las mismas. A través de la palabra reservada **static ** se puede definir un miembro visible a nivel de clase Al igual que las interfaces, podemos usar la palabra reservada readonly para marcar el miembro de una clase como solo lectura

      class Person { static personQuantity: number = 0 protected readonly id: number }

      a las propiedades static se las accede a través de la clase

      console.log(Person.personQuantity)

      a las propiedades readonly no se las puede modificar

      Abstract, protected, extends, static, readonly

      • Abstract = cuando requieres que una clase no sea instanciada
      • Protected = Entre público y privado, para que los elementos puedan ser accedidos por la clase y subclases
      • Extends = herencia de SUPER clase a subclases, para invocar al constructor de la SUPERclase en las subclases usar super(propiedades)
      • Static = Puede acceder a métodos y propiedades de una clase sin instanciarla
      • Readonly = Indica propiedades que solo se pueden leer

      Gran resumen !

      y cuando es un método abstract?

      JavaScript en su definición tan dinámica, sin tipado, tan milenial y viene Microsoft con TypeScript y le pone orden a todo ese relajo......

      Hasta ahora que ya se como se usan las clases abstractas Se deben utilizar cuando no queremos que se creen instancias de esta clase debido a que son demasiado generales. Excelente explicación.

      Esta clase bien podría estar en un curso de OOP, impresionante clase, explicada de manera sólida, sencilla y con código.

      ahora ya hay 2 cursos de poo en javascript

      Tienes toda la razón, tenía un poco de enredos en mi cabeza con este tema de la herencia y en una sola clase lo entendí.

      export {}; enum PhotoOrientation { Landscape, Portrait, Square, Panorama } // SUPERclase abstract class Item { protected readonly _id: number; protected _title: string; constructor(id: number, title: string) { this._id = id; this._title = title; } get id() { return this._id; } // set id(id: number) { // this._id = id; // } get title() { return this._title; } set title(title: string) { this._title = title; } } // get y set class Picture extends Item{ public static photoOrientation = PhotoOrientation; // Propiedades private _orientation: PhotoOrientation; public constructor(id: number, title: string, orientation: PhotoOrientation) { super(id, title); this.orientation = orientation; } get orientation() { return this._orientation; } set orientation(o: PhotoOrientation) { this._orientation = o; } // Comportamiento public toString() { return `[id: ${this.id}, title: ${this.title}, orientation: ${this.orientation}]`; } } class Album extends Item{ private pictures: Picture[]; public constructor(id: number, title: string) { super(id, title);// constructor de SUPER clase this.pictures = []; } public addPicture(picture: Picture) { this.pictures.push(picture); } } const album: Album = new Album(1, 'Personal Pictures'); const picture: Picture = new Picture(1, 'Platzi session', PhotoOrientation.Square); album.addPicture(picture); console.log('album', album); // Accediendo a los miembros publicos console.log('picture.id', picture.id); // get id() // picture.id = 100; // private, set id(100); picture.title = 'Another title'; // private album.title = 'Personal Activities'; //private console.log('album', album); // const item = new Item(1, 'Test title'); // console.log('item', item); // Probar el miembro estatico console.log('PhotoOrientation', Picture.photoOrientation.Landscape);

      Como saber cuando usar Interfaces y cuando usar Clase???

      Utiliza interfaces siempre. Cuando la complejidad de lo que estás haciendo te requiera usar modelos con clases entonces sí, usa clases 🔥

      No nos vayamos a los extremos... Las interfaces se crearon para alojar la shape (forma) de objetos puntuales; decir que siempre se deben utilizar interfaces es como decir que siempre se deben utilizar objetos literales.
      Las clases no son propias de TypeScript, son propias de JavaScript, e incluso, por su funcionamiento "under the hood" (por detrás), pueden optimizar el uso de memoria y rendimiento.
      Las interfaces se deben utilizar siempre como la forma de "tipar" un objeto en TypeScript, nunca llegarán a reemplazar una clase (ni sencilla ni compleja). Incluso, una instancia de una clase se puede tipar a través de una interface.
      Siempre que vayas a hacer Programación orientada a objetos, y tengas varios "moldes" (clases) de los cuales se vayan a instanciar constantemente objetos, usa Clases, tanto en TypeScript como en JavaScript.

      la verdad si le da un plus en POO a JS

      Totalmente, hace muy práctico.

      1. Super Clases:
      • Al igual que las interfaces, las clases también pueden heredar atributos y propiedades. |-> Implementa la habilidad de extender código de clases existentes a través de la herencia
      • Modificador de acceso protected que permite un acceso ni público ni privado. Dan acceso a los miembros cuando las subclases requieran usarlos.
      • super(): Sirve para invocar al constructor de una SUPERCLASE. Un objeto que instancie la (super)clase, va a tener inicializado las variables que dentro de la superclase fueron declaradas
      1. Clases Abstractas:
      • Son la base de donde otras clases pueden derivarse. Implementa funciones para sus instancias . abstract es la palabra reservada
      • Se usan cuando una super clase llega a ser demasiado general y queremos evitar crear instacias a partir de la misma.
      • La palabra reservada static se usa para definir un miembro visible a nivel de clase.
      • Se usa la palabra reservada readonly para marcar un miembro de una clase como solo lectura.
      export {} enum PhotoOrientation { Landscape, Portrait, Square, Panorama, }; //superclase abstract class Item { protected readonly _id: number; protected _title: string; constructor(id: number, title: string) { this._id = id; this._title = title; } get id() { return this._id } // set id(id: number) {this._id = id} // La definición de _id es inservible. get title() { return this._title } set title(t: string) {this._title = t} } // clase picture class Picture extends Item { public static photoOrientation = PhotoOrientation; private _orientation: PhotoOrientation; public constructor( id: number, title: string, orientation: PhotoOrientation ) { super(id, title); this._orientation = orientation; } private toString() { return `[id: ${this._id}, title: ${this._title}, orientation: ${this._orientation}]` } } // clase album class Album extends Item{ private _pictures: Picture[]; public constructor( id: number, title: string ) { super(id, title); this._pictures = []; } get picture() { return this._pictures } set picture(pic:Picture[]) {this._pictures = pic} public addPicture(picture: Picture) { this._pictures.push(picture); } } let album: Album = new Album(100, 'Photos of mine'); const newPic: Picture = new Picture(2, 'my new pic!', PhotoOrientation.Panorama); const new2Pic: Picture = new Picture(3, 'my 2nd new pic!', PhotoOrientation.Portrait); const new3Pic: Picture = new Picture(4, 'my 3rd new pic!', PhotoOrientation.Portrait); // Primer estado del álbum console.log('album inicial-> ', album); //cambiar id de álbum ó fotos /* new2Pic.id = 300; Se hacen inútiles debido new3Pic.id = 400; a la propiedad de readonly */ //cambiar titulo de álbum album.title = 'Mi nuevo álbum de fotos !'; //agregar más fotos a mi álbum album.addPicture(newPic); album.addPicture(new2Pic); album.addPicture(new3Pic); console.log('album modificado -> ', album); // const item = new Item(1, 'Test Title'); // Realmente no tiene sentido usar ésto, // console.log('item', item) // pues Item es muuy general. console.log('PhotoOrientation', PhotoOrientation);

      Que bueno es venir de Java a TypeScript, eso si con los conceptos de POO bien claros :D

      TypeScript soporta la herencia, con esto implementa la habilidad de extender código de clases existentes a otras.

      Utilizamos la palabra extends para heredar, si heredamos sólo se heredan los atributos public o protected.

      class Person { protected id:number; protected name:string; constructor(id:number, name:string){ } } class Student extends Person { private active:boolean constructor(id:number, name:string, active:boolean){ super(id,name) this.active = active } }

      En las clases de TypeScript se tienen disponibles las clases abstractas, estas son la base de donde otras clases podrían derivarse. A diferencia de una interface, una clase abstracta puede implementar funciones para sus instancias.

      abstract class Person {}

      Me esta gustando mucho TS, me recuerda a cuando empecé con C# en la Universidad pero terminé odiandolo por la forma en que me lo enseñaban, TS me esta ayudando a darle un segundo oportunidad.

      No entiendo porque elimina la linea 67, alguien me puede ayudar?. Gracias

      Por que ya está heredado de la super clase Item

      Debía eliminarla en la clase anterior, en la de los métodos get y set, pero se le pasó. Hasta ahora vio el error.

      ésta clase me gustó más que todas hasta el momento

      copie el codigo de esta clase y me da un error: ++Property '_orientation' has no initializer and is not definitely assigned in the constructor++ Saben que puede estar pasando?

      export {}; enum PhotoOrientation { Landscape, Portrait, Square, Panorama } // SUPERclase abstract class Item { protected readonly _id: number; protected _title: string; constructor(id: number, title: string) { this._id = id; this._title = title; } get id() { return this._id; } // set id(id: number) { // this._id = id; // } get title() { return this._title; } set title(title: string) { this._title = title; } } // get y set class Picture extends Item{ public static photoOrientation = PhotoOrientation; // Propiedades private _orientation: PhotoOrientation; // ++ESTA LINEA MARCA ERROR++ public constructor(id: number, title: string, orientation: PhotoOrientation) { super(id, title); this.orientation = orientation; } get orientation() { return this._orientation; } set orientation(o: PhotoOrientation) { this._orientation = o; } // Comportamiento public toString() { return `[id: ${this.id}, title: ${this.title}, orientation: ${this.orientation}]`; } } class Album extends Item{ private pictures: Picture[]; public constructor(id: number, title: string) { super(id, title);// constructor de SUPER clase this.pictures = []; } public addPicture(picture: Picture) { this.pictures.push(picture); } } const album: Album = new Album(1, 'Personal Pictures'); const picture: Picture = new Picture(1, 'Platzi session', PhotoOrientation.Square); album.addPicture(picture); console.log('album', album); // Accediendo a los miembros publicos console.log('picture.id', picture.id); // get id() // picture.id = 100; // private, set id(100); picture.title = 'Another title'; // private album.title = 'Personal Activities'; //private console.log('album', album); // const item = new Item(1, 'Test title'); // console.log('item', item); // Probar el miembro estatico console.log('PhotoOrientation', Picture.photoOrientation.Landscape);

      Si los metodos get/set no van a hacer nada mas que asignar el valor, conviene mejor declararlos public? o que otra ventaja tiene ademas de hacer algo intermedio antes de asignar el valor?

      Esa es la función como tal. Devolver el valor de tu variable. Es importante no permitir la modificación desde afuera, y que sólo a través de set y get puedas manipularla.

      no me deja acceder a la propiedad static de la clase picture alguien sabe porque?

      class Picture extends Item { public static PictureOrientation = PictureOrientation; //Propiedades private _orientation: PictureOrientation;

      que quieres hacer

      Wow, es una clase muy completa. Me ayudó mucho a repasar conceptos que ya no recordaba sobre la programación orientada a objetos. Que buen profesor