繁体   English   中英

打字稿Generic vs Union

[英]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 | numberstring | number不兼容string | number string | number

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM