CursosEmpresasBlogLiveConfPrecios

Funciones en TypeScript

Clase 19 de 32 • 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

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

    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

      Comentarios

      Bryan Alejandro Sánchez Ramírez

      Bryan Alejandro Sánchez Ramírez

      student•
      hace 6 años
        Juan Matus

        Juan Matus

        student•
        hace 6 años
        Luis Abdel Rangel Castro

        Luis Abdel Rangel Castro

        student•
        hace 6 años
      Estanislao Albin Wotoszyn Grillo

      Estanislao Albin Wotoszyn Grillo

      student•
      hace 6 años
        Enrique Devars

        Enrique Devars

        student•
        hace 6 años
        Alan Quispe

        Alan Quispe

        student•
        hace 5 años
      Jorge Méndez Ortega

      Jorge Méndez Ortega

      student•
      hace 6 años
        Cristian Blandon

        Cristian Blandon

        student•
        hace 5 años
      Juan Diego Urbina Chuscano

      Juan Diego Urbina Chuscano

      student•
      hace 6 años
        Platzi Team

        Platzi Team

        student•
        hace 5 años
        César Palma

        César Palma

        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
      Jorge Cruz Perez

      Jorge Cruz Perez

      student•
      hace 6 años
        Santiago Mendoza

        Santiago Mendoza

        student•
        hace 4 años
      Andres David Sanchez

      Andres David Sanchez

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

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      Diego Fernando Caviedes Camaho

      Diego Fernando Caviedes Camaho

      student•
      hace 4 años
      Boris Köhli-Richter

      Boris Köhli-Richter

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

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      Federico Walovnik

      Federico Walovnik

      student•
      hace 5 años
      Saul Vega Ramírez

      Saul Vega Ramírez

      student•
      hace 5 años
        Héctor Eduardo López Carballo

        Héctor Eduardo López Carballo

        student•
        hace 5 años
      Griger Ratia

      Griger Ratia

      student•
      hace 4 años
      Carlos Javier Bazan Huaman

      Carlos Javier Bazan Huaman

      student•
      hace 5 años
      Juan Esteban Galvis

      Juan Esteban Galvis

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

        Moisés Manuel Morín Hevia

        student•
        hace 5 años
      David Vargas Domínguez

      David Vargas Domínguez

      student•
      hace 6 años
      Stiven Trujillo

      Stiven Trujillo

      student•
      hace 5 años
        Guillermo Rodas Gómez

        Guillermo Rodas Gómez

        student•
        hace 5 años
      Alessandra Amicarella

      Alessandra Amicarella

      student•
      hace 4 años
      Mauro Eduardo Sánchez Simental

      Mauro Eduardo Sánchez Simental

      student•
      hace 4 años
      cindy yurley caceres parada

      cindy yurley caceres parada

      student•
      hace 5 años
        Juan David Sánchez

        Juan David Sánchez

        student•
        hace 5 años
        Mauricio Galvez

        Mauricio Galvez

        student•
        hace 5 años

      Ojo: un parámetro opcional siempre debe ir al final en dado caso que existan otros parámetros obligatorios.

      Podes pasar "undefined" para saltarte un parametro opcional en medio de parametros no opcionales.

      A required parameter cannot follow an optional parameter.

      Me parece que se equivocó al llamar flat array function, en realidad es fat arrow functions. Se las llama fat arrow por el tipo de flecha: -> simple => fat

      Gracias por el aporte :D

      buenisimo me estaba mareando con eso de array

      Se comentan solo los valores opcionales, pero nunca se comentaron los valores por defecto, les comparto un ejemplo

      /** * Listado de propiedades de una foto * * @param {string} title Nombre de la foto. * @param {string} date Fecha en la que fue tomada. * @param {SquareSize} size (Optional) Tamaño de la foto. * * @return {object} */ const dataPicture = (title: string, date: string, size: SquareSize = "100x100"): object => ({ title, date, size, });

      El ultimo parámetro size es opcional y siempre se tomara por defecto las medidas de 100x100

      Porque los default parameters son propios de JS, a diferencia de los opcionales que son propios de TS.

      falto parámetros Rest. Otra característica de TypeScript es la posibilidad de pasar una lista indefinida de valores y que los reciba un vector.

      El concepto de parámetro Rest se logra antecediendo tres puntos al nombre del parámetro:

      function sumar(...valores:number[]) { let suma=0; for(let x=0;x<valores.length;x++) suma+=valores[x]; return suma; } console.log(sumar(10, 2, 44, 3)); console.log(sumar(1, 2)); console.log(sumar());

      El parámetro 'valores' se le anteceden los tres puntos seguidos e indicamos que se trata de un vector de tipo 'number'. Cuando llamamos a la función le pasamos una lista de valores enteros que luego la función los empaqueta en el vector:

      console.log(sumar(10, 2, 44, 3)); console.log(sumar(1, 2)); console.log(sumar());

      La función con un parámetro Rest puede tener otros parámetros pero se deben declarar antes.

      Los parámetros Rest no pueden tener valores por defecto

      Gracias por el ejemplo compañero, muy util y sencillo

      solo el tipado es de typescript, rest parameter es javascript

      // Funciones en TypeScript // // Crear una Fotografia: JS // function createPicture(title, date, size) { // // title // } type SquareSize = '100x100' | '500x500' | '1000x1000' // Usamos TS, definimos tipos para paramentros function createPicture(title:string, date: string, size: SquareSize) { // Se crea la fotografia console.log('create Picture using', title, date, size); } createPicture('My Birthday', '2020-03-10', '500x500'); createPicture('Colombia', '2020-03-20'); // --&gt; Error // Parametros opcionales function createPicture(title?:string, date?: string, size?: SquareSize) { // Se crea la fotografia console.log('create Picture using', title, date, size); } // Flat Array Function let createPic = (title: string, date: string, size: SquareSize): object =&gt; { // return { // title: title, // date: date, // size: size // }; return { title, date, size }; }; const picture = createPic('Platzi session', '2020-03-10', '100x100'); console.log(picture);

      Buen código.

      • Los parámetros en las funciones son tipados
      • Se pueden definir parámetros opcionales
      • El tipo de retorno puede ser un tipo básico, enum, alias, tipo literal o una combinación de ellos
      //*Crear una fotografía //*Usando TS, definimos tipos para parámetros type SquareSize = '100x100' | '500x500' | '1000x1000' function createPicture(title:string, date:string, size: SquareSize) { //*Se crea la fotografía console.log('Create picture using: ', title, date, size) } createPicture('My picture', '2021/10/22', '1000x1000') //!createPicture('Disney Vacation', '2018-03-12') //!Esto da un error porque necesita 3 parámetros //*Parámetros opcionales //*Solo hace falta escribir '?' al lado del parámetro function createPhoto(title:string, date:string, size?: SquareSize) { //*Se crea la fotografía console.log('Create photo using: ', title, date, size) } createPhoto('Foto1', '2020-10-10') //! El tercer parámetro es undefined //* Flat array function let createPic = (title:string, date:string, size:SquareSize):object => { return { title, date, size } } const picture = createPic('Platzi session', '2020-03-10', '100x100') console.log('Picture: ', picture)

      Tengo un conflicto o una duda, con el tipo :object o incluso Object, imprime directo toda la variable, me refiero a picture, pero si solo quisieramos imprimir title o date o size por separado ¿como le haria?, el conflicto es porque ts me reporta el error de que la propiedad no existe para el objeto picture, pero compila/trasnpila y genera el código js el cual se ejecuta sin problema.

      Creo que debes repasar la clase de object en los tipos de variables en TypeScript. https://platzi.com/clases/1869-typescript/27973-object/

      Esta característica de solo declarar la variable dentro de un objeto y este le asigna el nombre de la propiedad de forma automática se llama ShortHand property

      return { title, date, size }

      Thanks,

      => son Arrow functions

      let createPicture = (name: string, date?: string): object => ({name, date});

      Muy bien, lo hice igual.

      Funciones en TS

      • Los parametros en las funciones son tipados
      • Se pueden definir parametros opcionales
      • Se puede definir que tipo de datos devolvera la funcion
      type SquareSize = '100x100' | '500x500' | '1000x1000'; // el simbolo ? indica que el parametro es opcional. // Siempre que tengamos un parametros opcional tiene que encontrasrse al final // en caso de que no resivamos este parametro opc va a tomar el valor pode default function createPicture(title: string, date: string, size?: SquareSize = "100x100"){ } // Fat Array Function let createPic = (title: string, date: string, size?: SquareSize): object => { return { title, date, size } };

      El uso de parametros opcionales, elimina la necesidad de sobrecarga de metodos o funciones? es decir tener 3 firmas distintas de esta funcion, una con solo el primer parametro, otra con 2, otra con 3, porque si son opcionales, pues practicamente se puede invocar como si tuvieramos las 3 firmas declaradas. o cual sería la diferencia?

      Hola!

      No, la sobrecarga de métodos está pensada para poder cambiar el comportamiento del método dependiendo del parámetro que se recibe. Yo pienso que esto está principalmente destinado para que los desarrolladores no puedan meter cosas que no van y por lo tanto se puedan evitar fallos en el código.

      cuantas bondades!

      el poder en las funciones de typescript son el tipado y las funciones tipo flecha.

      Funciones

      /* DEFINIR TIPOS PARA LAS FUNCIONE */ function Funcion(param1: string, param2: number){} /* PARAMETROS OPCIONES CON ? */ function Funcion(param1?: string, param2?: number){} /* PRIMERO LOS OBLIGATORIOS Y LUEGO LOS OPCIONALES */ function Funcion(param1: string, param2?: number){}

      Array Function

      let funcion = (param1: string, param2: number) : object => { return {} } let funcion = (param1: string, param2: number) : void => {}

      Buen algoritmo.

      En Typescript, por defecto cuando se coloca parámetros a una función estos son requeridos.

      Para volver un parámetro como opcional, debemos colocar el símbolo ? después del nombre del parámetro.

      function buildName(firstName: string, lastName?: string) { // ... }

      Cabe recalcar que los parámetros opcionales deben ir después de los requeridos. Colocarlos de la siguiente es inválido.

      function buildName(firstName?: string, lastName: string) // Invalid

      Si no le asigno el tipo object a la función, TypeScript infiere que esa función retorna un objeto?

      Hola Stiven, Teniendo como ejemplo el siguiente código:

      function createObject(id: number, title: string){ return {id, title}; } const obj = createObject(1, 'Test'); console.log(obj);

      Si posicionamos el cursor sobre la función

      2021-09-27_10-57.png
      ) Typescript infiere que retorna un Object de Js, por tanto podemos acceder a las propiedades del mismo, si queremos que retorne un object debemos hacerlo explicitamente.

      function createAnotherObject(id: number, title: string): object{ return {id, title}; }

      Te dejo el link del código en el playground de typescript. Éxitos!

      Al momento de type e interface, que los diferencia o en que situacion podemos/deberiamos usar el uno o el otro?

      Alguien que me pueda apoyar de como trabajar una dependencia que no este soportada TS y la tengo que incluir en mi proyecto TS como esta npm i conekta

      en typescript tambien podemos usar const hello = () => {}; ????

      Claro que sí. El tipo de dato que se va a inferir para la variable hello es () => void.

      Puedes tipar las arrow functions sin problema:

      const sum = (a: number, b: number): number => a + b;