@mattiamanzati
Type-Level Programming significa
codificare logiche nel type-system
che verranno valutate a compile-time
JavaScript Programming
Browser/NodeJS
TypeLevel Programming
TSC/LanguageServer/VSCode
TypeSystem più cosciente delle nostre logiche
significa
più errori a compile time, meno a runtime
e quindi
meno issue da risolvere il giorno del deploy
Alle basi del TypeLevel Programming:
interface MyInterface {
a: boolean
b: number
c: "LOL"
[K: string]: any // <==
// Gli altri devono esservi assignabili
}
type A = MyInterface["a"] // => boolean
type C = MyInterface["c"] // => "LOL"
type Pippo = MyInterface["pippo"] // => any
"Qualche feature potrebbe cambiare!"
Abbassa le aspettative...
Ancora un pochino...
Che basti?
Meglio abbondare!
Alle basi del TypeLevel Programming:
Alle basi del TypeLevel Programming:
Spingiamoci oltre:
0
1
2
N
0
1
2
N
type Zero = {
isZero: True
}
type One = {
isZero: False,
prev: Zero
}
type Two = {
isZero: False,
prev: One
}
type Succ<N extends Nat> = {
isZero: False,
prev: N
}
type One = Succ<Zero>
type Two = Succ<One>
type Three =
Succ<Succ<Succ<Zero>>>
Esageriamo:
<empty>
"uno"
"due"
true
type HListEmpty = {
isEmpty: True
item: never
nextList: never
}
type HListFirstItem = {
isEmpty: False,
item: I
nextList: HListEmpty
}
type HListItem<I, L extends HList> = {
isEmpty: False,
item: I
nextList: L
}
Ma in un caso pratico?