首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

函数解析an对象的Promise值的正确类型:{[key: string}:Promise<T> => {[key: string]:T}

函数解析an对象的Promise值的正确类型:{[key: string}:Promise<T> => {[key: string]:T}

这个函数的作用是解析一个对象an中的Promise值,并返回一个新的对象,其中Promise值被替换为其解析后的值。

答案:

这个函数的类型可以表示为:{[key: string}:Promise<T> => {[key: string]:T}。

解析:

  • {[key: string}:Promise<T>:这个部分表示函数的输入参数an是一个对象,其中键为字符串类型,值为Promise<T>类型。这意味着an对象的每个键对应的值都是一个Promise对象,该Promise对象的泛型类型为T。
  • =>:箭头表示函数的返回类型。
  • {[key: string]:T}:这个部分表示函数的返回值是一个新的对象,其中键为字符串类型,值为T类型。这意味着返回的对象与输入的an对象具有相同的键,但值被替换为其解析后的值。

函数的实现可以使用async/await或Promise的then方法来解析Promise值,并构建新的对象返回。以下是一个示例实现:

代码语言:txt
复制
async function resolvePromiseValues<T>(an: {[key: string]: Promise<T>}): Promise<{[key: string]: T}> {
  const resolvedValues: {[key: string]: T} = {};
  
  const keys = Object.keys(an);
  for (const key of keys) {
    const value = await an[key];
    resolvedValues[key] = value;
  }
  
  return resolvedValues;
}

在这个示例实现中,我们首先创建一个空对象resolvedValues来存储解析后的值。然后,我们使用Object.keys方法获取an对象的所有键,并使用for循环遍历每个键。在循环中,我们使用await关键字来等待每个Promise值的解析结果,并将解析后的值存储在resolvedValues对象中的相应键上。最后,我们返回resolvedValues对象作为函数的结果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云函数):https://cloud.tencent.com/product/scf
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是鸭子🦆类型

TypeScript 解析器,它可能是只鸭子也可能是只猫,你需要再函数逻辑中再做进一步判断。...is 关键字,这在 TypeScript 中被叫做类型谓词(type predicates),类型谓词是一个返回布尔函数,可以用来做类型保护; 类型保护是可执行运行时检查一种表达式,用于确保该类型在一定范围内...假设我们创建了一个自定义方法来递归遍历对象解析可能嵌套在里面的任何 Promise,下面就是一个很好用法: function isRecord(value: unknown):...( parsedObject: Record, ): Promise { const output = {}; for (const [key,...然后我们就可以在 recursiveResolve 函数中使用它们了,并且开销是很小,在整个函数中都能正确推断输入。

2.2K20

TypeScript 疑难杂症

限制传入对象必须包含某些字段 用于给某个处理特定对象函数来限制传入参数,尤其是当对象某些字段是可选项时候,比如说: test函数接受参数类型为: interface Param { key1...比如,你还可以写一个 ReturnType Promise 版本,用于获取 Promise 函数"解构类型" type PromiseReturnType any>...> Param将等同于如下类型: type Param = { a: string; b: number; c: boolean } 从一个函数数组中获取所有函数返回合并类型 函数数组为: function...injects数组中每个函数返回合并类型呢?...: number, book: string } 利用上面的原理,你可以很容易地实现这个需求: 实现一个 getInjectData 函数,它接受若干个函数参数,返回为这些函数返回对象合并结果 function

2K10
  • 再次研究一道网红typescript面试题

    ): Action 复制代码 现在有一个叫 connect 函数,它接受 EffectModule实例,将它变成另一个对象,这个对象上只有EffectModule 同名方法,但是方法类型签名被改变了...Connect返回和Connected完全一样,使得ts编译正常 很明显,我们需要做事情就是: 把EffectModule函数类型取出来 把函数参数、返回promise/action...把EffectModule函数类型取出来 说到取某些key出来,就是Pick或者Omit了。...整个流程就是:映射类型 =》 如果函数类型,返回key,否则返回never =》 对映射类型取值,得到函数类型key 映射类型 是指把一个类型映射为另一个类型key是类似for in语法,...,只有value为函数类型key了 把函数参数、返回promise/action infer infer表示在condition type条件语句中待推断类型变量,可以理解为解方程,infer

    1.2K10

    源码浅析-Vue3中13个全局Api

    分别是: createapp 返回一个提供应用上下文应用实例; h 返回一个”虚拟节点; definecomponent 返回options对象,在TS下,会给予组件正确参数类型推断; defineasynccomponent...但是,就类型而言,返回有一个合成类型构造函数,用于手动渲染函数、TSX 和 IDE 工具支持 definComponent主要是用来帮助Vue在TS下正确推断出setup()组件参数类型 引入...defineComponent() 以正确推断 setup() 组件参数类型; defineComponent 可以正确适配无 props、数组 props 等形式; 用法 **参数:**具有组件选项对象或者是一个...如下 // 声明props和return数据类型 interface Data { [key: string]: unknown } // 使用时候入参要加上声明,return也要加上声明 export...,我们可以知道它用于解析动态组件,在 resolveDynamicComponent 函数内部,若 component 参数是字符串类型,则会调用前面介绍 resolveAsset 方法来解析组件,

    2.5K40

    想去力扣当前端,TypeScript 需要掌握到什么程度?

    ,这个对象上只有「EffectModule 同名方法」,但是方法类型签名被改变了: asyncMethod(input: Promise): Promise>...「非函数属性」 这个对象(EffectModule 实例)上方法「只可能」有两种类型签名 根据以上信息,我们能够得到:我们只需要将作为参数传递进来 EffectModule 实例上函数类型签名修改一下...所以,我们有两件问题要解决: 如何将非函数属性去掉 如何转换函数类型签名 如何将非函数属性去掉 我们需要定义一个泛型,功能是接受一个对象,如果对象 value 是 函数,则保留,否则去掉即可。...Omit 某些 key,而是 Omit 为非函数 key。...如何转换函数类型签名 我们再来回顾一下题目要求: ? 也就是我们需要知道「怎么才能提取 Promise 和 Action 泛型中」。 实际上这两个几乎一样,会了一个,另外一个也就会了。

    1.2K10

    Vue3全局APi解析-源码学习

    分别是: createapp 返回一个提供应用上下文应用实例; h 返回一个”虚拟节点; definecomponent 返回options对象,在TS下,会给予组件正确参数类型推断; defineasynccomponent...但是,就类型而言,返回有一个合成类型构造函数,用于手动渲染函数、TSX 和 IDE 工具支持 definComponent主要是用来帮助Vue在TS下正确推断出setup()组件参数类型 引入...defineComponent() 以正确推断 setup() 组件参数类型; defineComponent 可以正确适配无 props、数组 props 等形式; 用法 源码浅析 GitHub...,我们可以知道它用于解析动态组件,在 resolveDynamicComponent 函数内部,若 component 参数是字符串类型,则会调用前面介绍 resolveAsset 方法来解析组件,...// 如果 resolveAsset 函数获取不到对应组件,则会返回当前 component 参数

    1.7K30

    58. 精读《Typescript2.0 - 2.9》

    key,因为对象类型仅表示它是一个对象类型,在将对象作为整体观察时是成立,但是 object类型是不承认任何具体 key 。...:,将对象所有属性变成可选。 右边:比如套一层 Promise,将对象每个 key value 类型覆盖。...从对象类型 T 挑选一些属性 K,比如对象拥有 10 个 key,只需要将 K 设置为 "name" | "age" 就可以生成仅支持这两个 key 对象类型。 Extract。...将对象某些属性转换成另一个类型。比较常见用在回调场景,回调函数返回类型会覆盖对象每一个 key 类型,此时类型系统需要 Record 接口才能完成推导。 Exclude。...排除 T null 与 undefined 可能性。 ReturnType。获取函数 T 返回类型,这个类型意义很大。 InstanceType。获取一个构造函数类型实例类型

    1K20

    精读《type challenges - easy》

    精读 Pick 手动实现内置 Pick 函数,返回一个新类型,从对象 T 中抽取类型 K: interface Todo { title: string description:...第二个难点在于如何生成一个仅包含 K 定义 Key 类型,你首先要知道有 { [A in keyof B]: B[A] } 这个硬知识,这样可以重新组合一个对象: // 代码 1 type Foo<T...,它可以被换掉,如果你换掉成另一个范围变量,那么这个对象 Key 范围就变了,这正好契合本题 K: // 代码 2(本题答案) type MyPick = {...所以其实放到泛型里 K 是没有默认,而写到对象里作为推导就有了默认。...Readonly 手动实现内置 Readonly 函数,将对象所有属性设置为只读: interface Todo { title: string description: string }

    66110

    【总结】1129- 200 行代码实现一个高效缓存库

    特点: 优雅语法,包装现有 API 调用,节省 API 调用; 完全输入结果。不需要类型转换。 支持不同缓存策略。 集成日志:检查 API 调用时间。 使用辅助函数来构建缓存 key。...,定义如下(移除日志相关代码): // 执行缓存设置 async cacheable( resource: () => Promise, // 一个返回Promise函数 key...#cacheable私有方法实现如下: // 处理缓存,如保存缓存对象等 async #cacheable( resource: () => Promise, key: string...#cacheables[key] as Cacheable | undefined // 如果不存在该 key缓存对象,则通过 Cacheable 实例化一个新缓存对象 // 并保存在该...#promise,并返回缓存,结束调用。否则将 resource 传入 #fetch执行。

    35410

    【实战】966- TypeScript 写一个基于 Proxy 缓存库

    proxy handler 添加缓存 当然,其实代理器中 handler 参数也是一个对象,那么既然是对象,当然可以添加数据项,如此,我们便可以基于 Map 缓存编写 memoize 函数用来提升算法递归性能...我们仍旧可以利用之前博客介绍函数生成唯一,只不过我们不再需要函数名了: const generateKeyError = new Error("Can't generate key from function...new WeakMap() : new Map() } } 之后,我添加各种类型缓存类都以此为基类。...// 面向接口,无论后面还会不会增加其他类型缓存类 export interface BaseCacheMap { delete(key: K): boolean; get(key...不过希望在今后工作中,不断进步。这样也能减少代码返工。 其他 函数创建 事实上,我在为当前库添加手动管理时候,考虑过直接复制函数,因为函数本身是一个对象。同时为当前函数添加 set 等方法。

    46310

    2022高频前端面试题合集之JavaScript篇(中)

    . == 隐试转换原理?是怎么转换 参考答案: 「两个与类型转换有关函数:valueOf()和toString()」 valueOf()语义是,返回这个对象逻辑上对应原始类型。...string 以 "0x" 开头,parseInt() 会把 string 其余部分解析为十六进制整数;parseInt("0xf") // 15 如果 string 以 0 开头,其后字符解析为八进制或十六进制数字...」 本质上是健集合,类似集合 可以遍历,方法很多,可以跟各种数据格式转换 「WeakMap」 只接受对象作为健名(null 除外),不接受其他类型作为健名 键名是弱引用,键值可以是任意,键名所指向对象可以被垃圾机制回收...125. console.log(1+'2')和 console.log(1-'2')打印结果 参考答案: 第一个打印出 '12',是一个 string 类型。...引用数据类型,就只有 1 种: object 基本数据类型又被称之为原始或简单,而引用数据类型又被称之为复杂或引用。 关于原始类型和引用类型区别,可以参阅第 26 题。

    2.3K10

    精读《Promise.all, Replace, Type Lookup...》

    精读 Promise.all 实现函数 PromiseAll,输入 PromiseLike,输出 Promise,其中 T 是输入解析结果: const promiseAllTest1 = PromiseAll...U : T[K] }> 不知道是 bug 还是 feature,TS { [K in keyof T]: T[K] } 能同时兼容元组、数组与对象类型。...上面的解法中,我们先利用 extend + infer 锁定 T 类型是包含 type key 对象,且将 infer U 指向了 type,所以在内部再利用三元运算符判断 U extends P...在第一个答案中,我们思维方式是 “找到对象中 type 进行判断”,而第二个答案直接用整个对象结构 { type: T } 判断,是更纯粹 TS 思维。...比较优秀思路是利用 TS 联合类型: // 本题答案 type Trim = T extends ` ${infer R}` | `${infer R} ` ?

    43720

    造一个 idb-keyval 轮子

    : 打开 key-val 数据库 添加 keyval 对象仓库(如果没有的话) 获取 key 对应 value ,并显示 this.result 看看看看,现在取个 value 还有没有点规矩了?...= undefined>(request: IDBRequest | IDBTransaction): Promise { return new Promise((resolve,...封装公共逻辑 OK,我们不妨再写个 uglySet 函数,你会发现从打开数据库到获取数据库里对象仓库这里又要抄一遍。我与重复不共戴天,所以这里应该把公共部分抽离出来。...} 还是有重复,我连 getDefaultStore() 都不想要了,所以最好方法是在函数里加一个默认参数: export async function get(key: IDBValidKey...store => promisifyRequest(store.get(key))) } 需要注意是,这里 customStore 类型其实是一个 Promise,所以要先 (await customStore

    34510

    ECMAScript 6 学习笔记

    新增加codePointAt()、String.fromCodePoint()、at()处理需要4个字节储存字符(Unicode码点大于0xFFFF字符) ES6对正则表达式添加了u修饰符,用来正确处理大于...eg :String.raw({ raw: 'test' }, 0, 1, 2);// 't0e1s2t' 等同于String.raw({ raw: ['t','e','s','t'] }, 0,...b) Symbol.keyFor方法返回一个已登记Symbol类型key。...它类似于对象,也是键值对集合,但是“键”范围不限于字符串,各种类型(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—对应,Map结构提供了“对应。...Promise对象 Promise对象,就可以将异步操作以同步操作流程表达出来,避免了层层嵌套回调函数。此外,Promise对象还提供了一整套完整接口,使得可以更加容易地控制异步操作。

    58430

    ECMAScript 6 学习笔记

    新增加codePointAt()、String.fromCodePoint()、at()处理需要4个字节储存字符(Unicode码点大于0xFFFF字符) ES6对正则表达式添加了u修饰符,用来正确处理大于...eg :String.raw({ raw: 'test' }, 0, 1, 2);// 't0e1s2t' 等同于String.raw({ raw: ['t','e','s','t'] }, 0,...b) Symbol.keyFor方法返回一个已登记Symbol类型key。...它类似于对象,也是键值对集合,但是“键”范围不限于字符串,各种类型(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—对应,Map结构提供了“对应。...Promise对象 Promise对象,就可以将异步操作以同步操作流程表达出来,避免了层层嵌套回调函数。此外,Promise对象还提供了一整套完整接口,使得可以更加容易地控制异步操作。

    86580
    领券