Type systems
.JS
Hassane Moustapha
!3
Javascript ?
!4
- Un client doit pouvoir créditer son compte
- Un client doit pouvoir débiter son compte
- Le système doit enregistrer cette opération
- Le système doit pouvoir annuler cette opération
Scénario
!5
*Event Sourcing*
Opération
- avoir un effet immédiat
- doit être réversible
!6
- s’applique sur un compte
Opération
- avoir un effet immédiat
- doit être réversible
!7
- s’applique sur un compte
Fonction qui applique le changement
Fonction qui annule le changement
Valeur du changement
Opération
- doFunc()
- doit être réversible
!8
- s’applique sur un compte
Fonction qui applique le changement
Fonction qui annule le changement
Valeur du changement
Opération
- doFunc()
- undo()
!9
- s’applique sur un compte
Fonction qui applique le changement
Fonction qui annule le changement
Valeur du changement
Opération
- doFunc()
- undo()
!10
- value
Fonction qui applique le changement
Fonction qui annule le changement
Valeur du changement
Opération
!11
!12
Opérations basiques
!13
Créditer un compte
* command
!14
!15
!16
Utilisation
!17
!18
!19
!20
!21
!22
Résultat
!23
!24
Zoom
!25
Zoom (2)
Résultat (2)
!26
account.execute(op)
!27
Montant
Fonction
Opération
account.execute(op)
!28
Montant
account.execute(op)
!29
Opération
Montant
account.execute(op)
!30
Montant
Fonction
Hmmmm
C’est chaud ça
31
Static Types
32
Ok! But why static ?
• Code documentation
• Error detection
• MonoMorphic Operations
• Unit test reduction
• Performance optimization ( AOT, JIT )
• Aiding immutability
• Prevent security vulnerabilities
• Everyone does it (Microsoft, Google, Facebook, etc)
!34
> npm install —save-dev flow-bin
!35
!36
!37
!38
!39
Zoom (3)
!40
!41
Type métier
!42
!43
Type métier
!44
Type métier
!45
Types métier
• Primitive Types
• Literal Types
• Mixed Types
• Any Types
• Maybe Types
• Variable Types
• Function Types
• Object Types
• Array Types
• Tuple Types
• Class Types
• Type Aliases
• Opaque Type Aliases
• Interface Types
• Generic Types
• Union Types
• Intersection Types
• Typeof Types
• Type Casting Expressions
• Utility Types
• Module Types
• Comment Types
Flow @types
!46
Flow -> votre arsenal
.babelrc
package.json
Alternatives
• TypeScript
• ELM
• ReasonML
- Martin Fowler
Merci

Type systems & javascript