错误的TypeScript Intelisense建议

3qpi33ja  于 3个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(37)
  • VSCode版本:1.34
  • 操作系统版本:Linux Mint Tessa

以下代码破坏了TS的智能感知。

export function get<T, K1 extends keyof T, K2 extends keyof T[K1]>(
  obj: T,
  keys: [K1, K2]
): T[K1][K2];
export function get<
  T,
  K1 extends keyof T,
  K2 extends keyof T[K1],
  K3 extends keyof T[K1][K2]
>(obj: T, keys: [K1, K2, K3]): T[K1][K2][K3];
export function get(obj: any, keys: any[]): any {
  for (const key of keys) obj = obj[key];
  return obj;
}

这些是TS的建议

然而,它们是错误的,因为第三个值需要是路径上对象的属性,确切地说只有值 'c'
类型正确,因为智能感知能够推断出结果

此外,它拒绝了除 'c' 之外的所有值,这意味着智能感知应该能够提供正确的建议。

1bqhqjot

1bqhqjot1#

使用TypeScript@3.5.0-dev.20190525进行测试。
完整示例:

export function get<T, K1 extends keyof T, K2 extends keyof T[K1]>(
    obj: T,
    keys: [K1, K2]
): T[K1][K2];
export function get<
    T,
    K1 extends keyof T,
    K2 extends keyof T[K1],
    K3 extends keyof T[K1][K2]
>(obj: T, keys: [K1, K2, K3]): T[K1][K2][K3];
export function get(obj: any, keys: any[]): any {
    for (const key of keys) obj = obj[key];
    return obj;
}

const obj = { a: { b: { c: 'x ' } } }
get(obj, ["a", 'b', ''])
jexiocij

jexiocij2#

我对这个很感兴趣,想试一下。也许有人能给我一些建议,告诉我应该从哪里开始研究?

相关问题