declare type KeyGetter = (obj: unknown) => string
// 取自 lodash
declare const identity: {
<T>(value: T): T
(): undefined
}
declare const identity2: {
<T>(value: T): T
}
declare const identity3: {
(): undefined
}
let a: KeyGetter = identity // 为啥没报错?!类型不安全了吧
let b : KeyGetter = identity2 // 正常报错
let c: KeyGetter = identity3 // 正常报错
第一个 identity 类型是什么意思?不是一个重载吗?
1
zsxeee 2022 年 7 月 8 日
let d: unknown = ""
T 类型应该是 unknown 了 |
2
Leviathann 2022 年 7 月 8 日
lodash 的 type 看起啦花里胡哨的一大堆,实际上经常是走到带 any 的重载,所以我都不用 lodash 了
|
3
evada 2022 年 7 月 8 日
看起来重载是参数和返回值可以任意组合?
declare const identity3: { (v: unknown): undefined (): string } 如果这样 identity3 也不会抱错 |
5
evada 2022 年 7 月 8 日
就是可以这样 () => T ,() => T 和 (unknow) => T 是兼容的
|