我试图达到说明一些通用 P 是 O 的一部分的直观结果。
declare function foo<O, P extends Partial<O>>(obj: O, part: P): P
但是,这允许键不是 O 的 P
// no errors
foo({a:2},{a:100, b:2})
这也不起作用
declare function foo<O, P>(obj: O, part: P & Partial<O>): P
这个版本有效
declare function foo<O, P>(obj: O, part: Partial<O>): unknown
// correct, Typescript complains that `b` is not allowed
foo({a:2},{a:100, b:2})
但是返回类型不能是泛型 P。
是否存在将 P 限制为 O 中的键并满足通用要求的解决方案?
- 更新
对于任何感兴趣的人,我已经发布了一些有用的部分类型的要点,这些部分类型不允许多余的属性
https://gist.github.com/babakness/a1ca775f81097ffae04098a8cfdadc60