`T`也可能是个函数,例如`Options void>` 那这时候用`typeof`来收缩函数,就有两个不同签名得函数了,编译器自然无法处理改怎么调用 可以单独限制下`defaultValue`泛型为函数得情况: type MaybeFunction = T extends Function ? never : T | IFunction export interface Options { serializer?: (value: T) => string; deserializer?: (value: string) => T; defaultValue?: MaybeFunction }