type Ref2 = { name: string, age: number }
interface Ref {
name: string,
age: number,
}
type BRef2 = Ref2 extends Record<string, unknown> ? string : number // type BRef2 = string
type BRef3 = Ref extends Record<string, unknown> ? string : number // type BRef3 = number
社区有很多人问过这个问题。具体见此 Issue: https://github.com/microsoft/TypeScript/issues/42825
简而言之就是 interface 会有类型合并、而 type 没有,所以 tsc 无法准确推断 interface 是否满足
[key: string]
的条件。