Présentation de Records & Tuples, une feature JavaScript à l'état de proposition au comité TC39 (stage-2), qui apporte des structures immuables à JavaScript, avec un comportement de primitives composées.
Ces nouvelles structures ont un grand interêt pour les apps frontend, en particulier React.
10. Types non primitifs: interdits
const record1 = #{
a: {regular: 'object'},
};
// throws TypeError, un objet n'est pas une primitive
const record2 = #{
b: new Date(),
};
// throws TypeError, Date n'est pas une primitive
const record3 = #{
c: new MyClass(),
};
// throws TypeError, MyClass n'est pas une primitive
const record4 = #{
d: function () { alert('forbidden'); },
};
// throws TypeError, une fonction n'est pas une primitive
10 @sebastienlorber
21. API surface:
• explicite grâce à TypeScript
• exprimer le besoin d'identités stable
type User = ImmutableRecord<{id: string, firstName: string, lastName: string}>
type Company = ImmutableRecord<{id: string, name: string}>
type MyComponentProps = {
userAndCompany: ImmutableRecord<{
user: User,
company: Company,
}>
}
21 @sebastienlorber
23. Records & Tuples: tradeoffs
• Compléxifie JavaScript
• Stockage de types non primitifs: références
• Détails d'implémentation non spécifiés
• Benchmarks à venir
• Record TypeScript: conflict
23 @sebastienlorber
24. Conclusion
• Facile à prendre en main
• Immuabilité: cool
• Primitive composée: impact significatif
24 @sebastienlorber