a macchina, quando vogliamo creare automaticamente le proprietà della nostra classe dalla definizione del costruttore, siamo in grado di sfruttare la stenografia Proprietà parametro, ad esempio:Combinando la stenografia Proprietà parametro con destrutturazione a macchina
class Person {
constructor(public firstName : string, public lastName : number, public age : number) {
}
}
E poi, il Javascript transpiled sarà:
var Person = (function() {
function Person(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
return Person;
})();
Ma se vogliamo ricevere un oggetto nel costruttore, sarebbe qualcosa di simile:
interface IPerson {
firstName : string,
lastName : string,
age: number
}
class Person {
constructor(person : IPerson) {
this.firstName = person.firstName;
this.lastName = person.lastName;
this.age = person.age;
}
}
Dal tipografico 1.5, siamo in grado di usufruire di destrutturazione, per esempio:
class Person {
constructor({firstName, lastName, age} : {firstName: string, lastName: string, age: number}) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
}
Domanda: come coniugare la stenografia Proprietà parametro e destrutturazione a macchina?
ho cercato di definire public
prima della definizione dell'oggetto, per esempio:
class Person {
constructor(public {firstName, lastName, age} : {firstName: string, lastName: string, age: number}) {
}
}
cercato di definire prima di ogni variabile, per esempio:
class Person {
constructor({public firstName, public lastName, public age} : {firstName: string, lastName: string, age: number}) {
}
}
Ma non ho avuto successo. qualche idea?
Sai perché è necessario avvolgere l'incarico destrutturante tra parentesi? Intendo per es. l'esterno '()' in '({manager: this.manager} = args);'. Ho trovato che sia necessario quando si esegue il mapping sulle proprietà dell'oggetto (come * questo.manager *), mentre di solito non sono necessari quando si esegue il mapping su variabili locali – superjos
C'è una nota nella sezione [Object Destructuring] (https://www.typescriptlang.org/docs/handbook/variable-declarations.html#object- destrutturazione) del manuale di TypeScript che dice "Notate che dovevamo circondare questa frase con parentesi.Il JavaScript normalmente analizza un {come l'inizio del blocco". Quindi la ragione è che penserebbe che fosse un blocco invece di un oggetto destrutturante. – Schmalls