Establecer el valor predeterminado para el objeto TypeScript pasado como argumento
function sayName(params: {firstName: string; lastName?: string}) {
params.lastName = params.lastName || 'smith'; // <<-- any better alternative to this?
var name = params.firstName + params.lastName
alert(name);
}
sayName({firstName: 'bob'});
Me había imaginado que algo como esto podría funcionar:
function sayName(params: {firstName: string; lastName: string = 'smith'}) {
Obviamente, si estos fueran argumentos simples, podrías hacerlo con:
function sayName(firstName: string, lastName = 'smith') {
var name = firstName + lastName;
alert(name);
}
sayName('bob');
Y en CoffeeScript tienes acceso al operador de existencia condicional, por lo que puedes hacer:
param.lastName ?= 'smith'
Que se compila en javascript:
if (param.lastName == null) {
param.lastName = 'smith';
}
En realidad, ahora parece haber una forma sencilla. El siguiente código funciona en TypeScript 1.5:
function sayName({ first, last = 'Smith' }: {first: string; last?: string }): void {
const name = first + ' ' + last;
console.log(name);
}
sayName({ first: 'Bob' });
El truco consiste en poner primero entre paréntesis las claves que desea seleccionar del objeto de argumento, key=value
para cualquier valor predeterminado. Siga eso con :
y una declaración de tipo.
Esto es un poco diferente de lo que intentaba hacer, porque en lugar de tener un params
objeto intacto, tiene variables desreferenciadas.
Si desea que sea opcional pasar algo a la función, agregue un ?
para todas las claves del tipo y agregue un valor predeterminado de ={}
después de la declaración de tipo:
function sayName({first='Bob',last='Smith'}: {first?: string; last?: string}={}){
var name = first + " " + last;
alert(name);
}
sayName();
Typecript admite parámetros predeterminados ahora:
https://www.typescriptlang.org/docs/handbook/functions.html
Además, agregar un valor predeterminado le permite omitir la declaración de tipo, porque se puede inferir del valor predeterminado:
function sayName(firstName: string, lastName = "Smith") {
const name = firstName + ' ' + lastName;
alert(name);
}
sayName('Bob');
La desestructuración de objetos del objeto parámetro es lo que apuntan muchas de las respuestas anteriores y Typecript ahora cuenta con los métodos para hacerlo mucho más fácil de leer y comprender intuitivamente.
Conceptos básicos de desestructuración: al desestructurar un objeto, puede elegir propiedades de un objeto por nombre de clave. Puede definir tantas propiedades como desee, y los valores predeterminados se establecen mediante una sintaxis básica de let {key = default} = object
.
let {firstName, lastName = 'Smith'} = myParamsObject;
//Compiles to:
var firstName = myParamsObject.firstName,
_a = myParamsObject.lastName,
lastName = _a === void 0 ? 'Smith' : _a;
Escribir una interfaz, tipo o clase para el objeto de parámetro mejora la legibilidad.
type FullName = {
firstName: string;
/** @defaultValue 'Smith' */
lastName ? : string;
}
function sayName(params: FullName) {
// Set defaults for parameter object
var { firstName, lastName = 'Smith'} = params;
// Do Stuff
var name = firstName + " " + lastName;
alert(name);
}
// Use it
sayName({
firstName: 'Bob'
});