【发布时间】:2019-10-25 15:33:53
【问题描述】:
如果我使用value: string | number 之类的参数定义函数类型,我可以定义该类型的函数(值:字符串)=> null。并且打字稿不显示任何警告。
但是如果我用泛型参数<T extends string | number>(value: T)定义函数类型,那么打字稿会显示错误。
有人能解释一下这种行为吗?
代码示例
type OnChangeUnion = (value: string | number) => void;
type OnChangeGeneric = <T extends string | number>(value: T) => void;
const handleChange = (value: string) => null;
const onChange: OnChangeGeneric = handleChange;
const onChangeA: OnChangeUnion = handleChange;
【问题讨论】:
-
Tbh 如果您启用所有检查(请参阅操场上的“选项”),您会看到两个分配都失败了。
-
它们都是错误的分配...
OnChangeUnion和OnChangeGeneric都是函数类型,必须接受string | number参数。但是handleChange只接受string参数,所以它既不是OnChangeUnion也不是OnChangeGeneric。
标签: typescript