了解大型框架要从读源码开始。
了解源码设计与实现思想要从框架的设计和参与者的书本开始。
对于如下的问题你会怎么写?
问题
定义一个n项重复数组(元组)
type count<n extends number, v extends any = 0, counter extends any[] = []> =
counter['length'] extends n ? counter : count<n, v, [...counter, v]>
let a0:count<5>
// 等同于
// let a0: [0, 0, 0, 0, 0]
// 这里的a0相当于就是一个长度为5,类型为0的元祖
let a1:count<5, any>
// 等同于
// let a1: [any, any, any, any, any]
let a2:count<5, number[], [[1,2,3], [4,5,6]]>
// let a2: [[1, 2, 3], [4, 5, 6], number[], number[], number[]]
加法
type add<m extends number, n extends number> = [...count<m>, ...count<n>]["length"]
let b:add<20, 9>
// b: 29