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-07-08 09:29:25 +08:00
let d: unknown = ""
T 类型应该是 unknown 了 |
2
Leviathann 2022-07-08 09:50:58 +08:00
lodash 的 type 看起啦花里胡哨的一大堆,实际上经常是走到带 any 的重载,所以我都不用 lodash 了
|
3
evada 2022-07-08 10:01:42 +08:00
看起来重载是参数和返回值可以任意组合?
declare const identity3: { (v: unknown): undefined (): string } 如果这样 identity3 也不会抱错 |
4
makelove OP @evada 你这个有 string,可是 identity 根本没有 string 返回值啊?只有个 T,而 T 和 string 不相容
|
5
evada 2022-07-08 10:16:16 +08:00
就是可以这样 () => T ,() => T 和 (unknow) => T 是兼容的
|