Typescript 函数赋值的类型检查,具有联合类型参数的函数

Typescript 函数赋值的类型检查,具有联合类型参数的函数,typescript,Typescript,此行产生错误“类型‘字符串’|编号’不可分配给类型‘字符串’” 那么为什么这一个没有错误呢 const myFunc: (ns: number | string) => void = (n: number) => alert(n * 2); // no error ??? 回调在js/ts中经常使用,所以我觉得很奇怪。 当前ts版本为3.1在默认编译器设置下,回调是双变量的,这意味着如果实现参数是声明参数的子类型,则允许赋值 这显然是类型系统中的一个大漏洞,它被strict*选项

此行产生错误“类型‘字符串’|编号’不可分配给类型‘字符串’”

那么为什么这一个没有错误呢

const myFunc: (ns: number | string) => void = (n: number) => alert(n * 2);  // no error ???
回调在js/ts中经常使用,所以我觉得很奇怪。
当前ts版本为3.1

在默认编译器设置下,回调是双变量的,这意味着如果实现参数是声明参数的子类型,则允许赋值


这显然是类型系统中的一个大漏洞,它被
strict*
选项堵塞,即
strictFunctionTypes
,如本文所述。如果启用此编译器选项,则赋值将出错。

确保函数不应为const myFunc:(ns:number)=>void=(n:number | string)=>alert(+n*2);//没有错误???
const myFunc: (ns: number | string) => void = (n: number) => alert(n * 2);  // no error ???