繁体   English   中英

如何通过键访问对象类型的值?

[英]How to access the type of object's value by its key?

所以我有一个返回 function 的 function。我想要这个:

fn: <T extends Object>(key: keyof T) => (value: ???) => void

我要什么??? 成为instanceOfT[key]的类型。 例如,如果T={name: string; age: number} T={name: string; age: number}我希望fn('name')返回(value: string) => void并让fn('age')返回(value: number) => void

这可能吗?

不幸的是,无法部分推断您的 function 的通用类型。请参阅 GitHub 问题:

您需要使用其中一种解决方法:

  • 咖喱
  • 传递一个虚拟参数
  • 将所有参数指定为通用 arguments

请参阅对In TypeScript 的回答是否可以从字符串的输入类型推断可区分联合的字符串文字类型?

namespace Curry {
  type Consumer<K> = (value: K) => void;

  function makeConsumer<P>()/*: <K extends keyof P>(key: K) => Consumer<P[K]>*/ { 
    function factory<K extends keyof P>(key: K): Consumer<P[K]> {
      return (value: P[K]) => console.log(value);
    }
    return factory;
  }
  const barConsumer = makeConsumer<{ bar: string }>()("bar");
}


namespace Dummy {
  type Consumer<K> = (value: K) => void;

  function makeConsumer<P, K extends keyof P>(dummy: P, key: K): Consumer<P[K]> { 
    return (value: P[K]) => console.log(value);  
  }
  type T = { bar: string };
  const barConsumer = makeConsumer(null! as T, 'bar');
}


namespace AllParamsInGeneric {
  type Consumer<K> = (value: K) => void;

  function makeConsumer<P, K extends keyof P>(): Consumer<P[K]> { 
    return (value: P[K]) => console.log(value);  
  }
  const barConsumer = makeConsumer<{ bar: string }, 'bar'>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM