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):
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:
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 LiteralsfunctioncreateProductJson(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:
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:
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
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.
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”.
````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
}
}
```
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 | undefinedreturn{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 }
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
Want to see more contributions, questions and answers from the community?