You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

2 Días
17 Hrs
50 Min
25 Seg
Curso de TypeScript

Curso de TypeScript

Nicolas Molina

Nicolas Molina

Funciones

17/24
Resources

The functions are native to JavaScript and essentially work the same in TypeScript. However, the latter, with its typing system, will help us to perform a safer implementation:

  • We can define the function arguments to have a certain data type (or more than one if Union Types is used):
type Sizes = 's' | 'M' | 'L' | 'XL'; //Alias and Literal Typesfunction createProductJson(title: string, createdAt: Date, stock: number, size: Sizes){ return { title, createdAt, stock, size } }

The createdAt argument indicates that it is of type Date in allusion to JavaScript's own Date object and not to a data type such as string or number. The definitions are different.

  • When we make use of our function, TypeScript will check that you send it all the parameters in order and with the data type that was declared in the function:
const product1 = createProductJson( " title", new Date('10/10/3030'), 30, 'M' )
Ejemplo de una función en TypeScript

In Visual Studio Code, if you leave the cursor over the name of the function you are going to invoke, it will show you a message with the details of the function, what it expects as parameters and what it will return indicating also the order and the data type of each variable.

  • If we want an argument to be optional to send, we can use the modifier ? next to the name of the argument:
type Sizes = 's' | 'M' | 'L' | 'XL'; //Alias and Type Literalsfunction createProductJson(title: string, createdAt: Date, stock?: number, size?: Sizes){ /*Function code*/}

Note: when defining optional arguments in a function, these must be placed at the end, otherwise TypeScript will indicate an **error, since there could be confusion when invoking the function and sending the respective parameters:

function randomFunc(title: string, amount?: number){} //CORRECTfunction otherFunc(title?: string, amount: number){} // ERROR.

Contributed by: Martin Alvarez.

Contributions 26

Questions 3

Sort by:

Want to see more contributions, questions and answers from the community?

También podemos hacer un return explicito usando parentesis en vez de llaves. Dado que retornamos un objeto, es por eso, que dentro de los parentesis hay llaves:

const createProductToJson2 = (title: string, createdAt: Date, stock: number, size?: Size) => ({title, createdAt, stock, size})

amo TS!

Excelente curso, mucha claridad en todos los fundamentos, en ese aspecto Platzi es superior a cualquier otra plataforma qué yo conozca, aquí se enfatiza desde lo básico sin perder de vista la parte práctica…Sigan así, qué gran trabajo

Funciones en TS

En TS tenemos que declarar el tipo de dato de cada parámetro en la función. Además de que TS nos va a marcar error en caso de que agreguemos mas o menos parámetros de los requeridos.

// JS
function createPerson(name, lastName){
  return {name, lastName}
}
createPerson() // no error
createPerson(0, true) // no error
createPerson('o', 32, true) //no error

// TS
function createPerson(name: string, lastName: string){
  return {name, lastName}
}
createPerson() // ERROR
createPerson(0, true) // ERROR
createPerson('o', 32, true) // ERROR

Esta es una manera en la que TS nos ayuda. También podemos tener parámetros opcionales, que si no son declarados, son undefined.

function createPerson(
  name: string,
  lastName: string,
  age?: number){
    return {name, lastName, age}
}

En este caso age es opcional

El contenido de esta clase:

(() => {
  type Sizes = 'S' | 'M' | 'L' | 'XL';

  function createProductJson(
    title: string,
    createdAt: Date,
    stock: number,
    size: Sizes
){
   return {
        title,
        createdAt,
        stock,
        size
    }
}

  const producto1=createProductJson("P1", new Date(),12,"XL");
  console.log(producto1);
  console.log(producto1.title);
  console.log(producto1.stock);
  console.log(producto1.size);

  const createProductJsonV2=(
    title: string,
    createdAt: Date,
    stock: number,
    size?: Sizes
) => {
   return {
        title,
        createdAt,
        stock,
        size
    }
}

const producto2=createProductJson("P1", new Date(),12);
console.log(producto2);
console.log(producto2.title);
console.log(producto2.stock);
console.log(producto2.size);

})();

Ojo que existe una diferencia al crear funciones con FUNCTION y con ()=>{}, hoisting es el tema

Les comparto mis apuntes. 😄

Tipo de dato Date

Podemos usarlo así tal cual Date no vamos a tener ningún problema como teníamos con Number, Object, etc.

Sintaxis tipo inferido

Funciones declarativas

function functionName (parameters: dataTypes) { statements }

Arrow functions

const functionName = (parameters: dataTypes) => { statements }

Parámetros opcionales

Agregamos ? después del nombre de nuestro parámetro pero antes de los :.

Al no enviar ese parámetro en cuando usamos la función por defecto este será undefined.

function functionName (parameters?: dataTypes): dataTypes { statements }

Recomendación

Se recomienda usar arrow functions por encima de las funciones declarativas normales.

Aqui esta la url del github en la rama de esta clase:
https://github.com/platzi/curso-typescript-fundamentos/tree/15-step

Cada clase me fascina mas TS!!
Excelente profesor por cierto.

Es buena práctica que si colcoamos parámetros opcionales colocarle un valor podefecto!

Tipos de argumentos

Algo muy bueno a tener en cuenta que las funciones pueden manejar tanto tipos de parámetros obligatorios (Los especificados en la declaración de la función), luego están los parámetros opcionales que estos siempre deben de ir al final de los parámetros, es decir, después de los parámetros obligatorios, esto es regla en las últimas versiones de TS y por último, los parametros por defecto que se escriben como en JS, que sería myName: string = “Alvaro”, en caso que no envíe nada, la variable myName será “Alvaro”.

El operador ? en los parametros de una función es sugar syntax para el tipo de dato udenfined.

    const greet = (name?: string = undefined) => {
        name ? console.log(`Greetings ${name}!`) : console.log('Greetings!')
    }

    greet('Angel') # Greetings Angel!
    greet() # Greetings

Como no amar TypeScript! Saludos Magellanics 😃

Hola buenas, como están?, les recomiendo una extensión que se llama Error Lens, para Visual Studio Code, refleja los errores en la misma línea

````js //Diferencias entre Function y Arrow Function en el uso del this: class Counter { count = 0; increment() { setTimeout(function() { this.count++; // 'this' se refiere al objeto global (window en navegadores) }, 1000); } incrementArrow() { setTimeout(() => { this.count++; // 'this' se refiere correctamente al objeto Counter }, 1000); } } ```class Counter { count = 0; increment() { setTimeout(function() { this.count++; // 'this' se refiere al objeto global (window en navegadores) }, 1000); } incrementArrow() { setTimeout(() => { this.count++; // 'this' se refiere correctamente al objeto Counter }, 1000); } } ````
Yo se que depronto hay muchos que sabe lo que voy a decir a continuacion, pero lo coloco por que me parece relevante:unction suma2 (a:number, b:number, c?:number){    return a + b + (c??0);  }  console.log(suma2(1,2))  console.log(suma2(2,8,10))function suma2 (a:number, b:number, c?:number){    return a + b + (c??0);  }  console.log(suma2(1,2))  console.log(suma2(2,8,10)) 1\. en la clase el porfesor peude colcar el ? para indicar que es opcional yque no debe molestar si no lo agregamos, pero si estan haciendo una funcion que retorne numeros, no pueden solo colocar le ? en el parametro que quiern que sea opcional, un ejemplo seria: ```js function suma2 (a:number, b:number, c?:number){ return a + b + c; } console.log(suma2(1,2)) console.log(suma2(2,8,10)) ```ya que esto me generaria un error ya que c es undefined y no puede sumar, por ende debemos hacer dos opciones, la primera es asignarle un valor por defecto a c, es decir que c sea 0 o la otra opcion seria usar el operador ?? el cual me permitira asignarle un valor a la variable ne caso de ser nula o undefined, como acontinuacion: ```js function suma2 (a:number, b:number, c?:number){ return a + b + (c??0); } console.log(suma2(1,2)) console.log(suma2(2,8,10)) ```- como segundo punto es que no se pueden colcoar los parametros opcionales en medio de parametros "obligatorios" ya que Js o Ts no sabe si el valor que pasaste era el opcional o no, por ende deben ir siempre al final o que tus parametros sean uno solo en formato de objeto.
Tambien pueden usar el operador '?' despues de size y antes de los dos puntos : para decirle que tambien acepta undefined: ```ts const createProductToJson = ( title: String, createdAt: Date, stock: number, size?: Sizes //a esta linea me refiero ) => { return { //retorno un json title, createdAt, stock, size } } ```
```js (() => { type Sizes = 'S' | 'M' | 'L' | 'XL'; function createProductToJson( title: string, createdAt: Date, stock: number, size: Sizes ) { return { title, createdAt, stock, size, }; } const product1 = createProductToJson('p1', new Date(), 12, 'XL'); console.log(product1); console.log(product1.title); console.log(product1.stock); console.log(product1.size); const createProductToJsonV2 = ( title: string, createdAt: Date, stock: number, size?: Sizes ) => { return { title, createdAt, stock, size, }; }; const product2 = createProductToJsonV2('p1', new Date(), 12); console.log(product2); console.log(product2.title); console.log(product2.stock); console.log(product2.size); })(); ```(() => { type Sizes = 'S' | 'M' | 'L' | 'XL'; function createProductToJson( title: string, createdAt: Date, stock: number, size: Sizes ) { return { title, createdAt, stock, size, }; } const product1 = createProductToJson('p1', new Date(), 12, 'XL'); console.log(product1); console.log(product1.title); console.log(product1.stock); console.log(product1.size); const createProductToJsonV2 = ( title: string, createdAt: Date, stock: number, size?: Sizes ) => { return { title, createdAt, stock, size, }; }; const product2 = createProductToJsonV2('p1', new Date(), 12); console.log(product2); console.log(product2.title); console.log(product2.stock); console.log(product2.size);})();
tambien puedes crear parametros opcionales con la forma tradicional de ecmascript 6, asignandole un valor por defecto al parametro, como en el siguiente codigo, esto automaticamente añade un optional chaining al parametro.  const createProductToJsonV2 = (title: string,    createdAt: Date,    stock: number,    size: Sizes = 'L'  ) =>  {    return {      title,      createdAt,      stock,      size    }  } ```js const createProductToJsonV2 = (title: string, createdAt: Date, stock: number, size: Sizes = 'L' ) => { return { title, createdAt, stock, size } } ```

Mis notas: hice la prueba de usar los valores por default para un parametro y funciona similar. encuanto a que el valor es opcional pero obviamente retornan cosas diferentes, el parametro con valor por default devolvera el que se le definiera y el que usa el “?” devolvera undefined.

 //?In a function types are used when defining the parameters and it apllies all we've seen before.
  type Sizes = 'S' | 'M' | 'L' | 'XL';

  const myProductObj = (productName: string, productSize: Sizes, personalized: boolean = false) => {
    //*I can give a default value to a parameter, so it's optional.
    return{productName, productSize, personalized}
  }
  const myProductObj2 = (productName: string, productSize: Sizes, personalized?: boolean) => {
    //* if i add a "?" after the parameter name, it means the parameter is optional but if is not passed its value will be "undefined" so typescript infer that the value is in this case: boolean | undefined
    return{productName, productSize, personalized}
  }

  const product1 = myProductObj('capicard', 'S');
  console.log(product1);//{ productName: 'capicard', productSize: 'S', personalized: false }

  const product2 = myProductObj2('capishirt','M')
  console.log(product2);//{ productName: 'capishirt', productSize: 'M', personalized: undefined }

La verdad que este curso es muy bueno, me está sirviendo muchísimo! Gracias ♥

So far, so good
👍 👍 👍

Nicolas muy bueno que además de ir de una a la práctica expliques, por ejemplo una función es un objeto que permite bla bla bla bla, por que hay personas que hacen este curso y apenas están iniciando en el mundo del desarrollo, entonces empiezan a desarrollar si saber que están desarrollando

arrow function en TS.