[英]Typescript Generic vs Union
如果我使用像value: string | number
这样的参数定义函数类型 value: string | number
,我可以定义函数(值:字符串)=>该类型的空值。 打字稿不显示任何警告。
但是如果我用泛型参数<T extends string | number>(value: T)
定义函数类型 <T extends string | number>(value: T)
,然后typescript将显示错误。
有人可以解释这种行为吗?
代码示例
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;
对于Generic示例,您的符号略有偏差:
type OnChangeGeneric<T extends string | number> = (value: T) => void;
const handleChange = (value: string) => null;
const onChange: OnChangeGeneric<string> = handleChange;
Union示例将抛出实际的编译器错误(由@zerkms指出),因为handleChange
只接受一个string
,该string | number
与string | number
不兼容string | number
string | number
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.