作者回复: 本来……其实……一切都挺对的,结构还特别清晰(编程的好习惯)。但是AddHeaders存在一点儿小错误。 ``` // 正确的AddHeaders type AddHeaders<Matrix extends any[], Header extends string[]> = [ ['', ...Header], ...{ // 注意下面应该用extends来再次筛选,而不是直接对每一个K用交叉 [K in keyof Matrix]: K extends (keyof Header & `${number}`) ? [Header[K], ...Matrix[K]] : Matrix[K] } ]; ``` 其中 “K extends (keyof Header & `${number}`)”用于筛选那些能用在Header[]中的number成员key用于取行header,这是目前来说比较可行的的方法。在后续课程中介绍过模板中的推断后,你也可以使用一个较简单的表达式:“K extends `${infer I extends number}`”,然后使用Header[I]取行的header。