TypeScrip允许在函数类型参数上使用const
修饰符,因此推断的类型与接收到的文本具有as const
相同
function identity<const T>(a: T){
return a
}
使用identity({ a: 42 })
时,推断的类型是{ a: 42 }
,而不是预期的{ a: number }
.这种奇怪的行为发生在以下几个方面:
function optionalIfFoo<
K extends string,
const T
>(foo: K, ...rest: K extends 'foo' ? []: [bar: T]){
return rest[0]
}
除了T的推论外,工作情况与预期一致.optionalIfFoo('notFoo', { a: 42 })
中T的推断类型是{ a: number }
,而不是{ a: 42 }
在第二种情况下,有没有办法使其推断为{ a: 42 }
?