先来一段正常的 typescript 代码
type Q1 = '-open-flag' extends `${infer L}-${infer R1}${infer R2}` ? true : false
结果是 true , 在这个例子中 infer L 是一个 "" , infer R1 是一个 "o" , infer R2 是一个 "pen-flag"
extends 要想成立需要满足2个条件 字面量类型-(横杠)存在并且三个infer至少有一个infer可以取到类型。
为什么下面这个例子的类型是 "abc abc abc "
type Q2 = "lag" extends `${infer L}-${infer R1}${infer R2}` ? true : L;
正如你所说:
但是
L
、R1
、R2
三个变量只能在extends
成立的分支中使用,而在第二个例子中,显然不会走到成立的分支,所以类型Q2
应该是会报错的。