typescript,函数如何根据传入的key,返回对象对应的这些key?比如:
const obj = { name: 'Marcelo', age: 27, role: ['admin']};type ObjType = { [key in keyof typeof obj]: typeof obj[key]}const getAttr = <T extends ObjType, K extends keyof T, KS extends Array<K>>(...attribute: KS): T[KS] => { const result = {}; for (const attr of attribute) { result[attr] = obj[attr]; } return result;};const attr = getAttr('age', 'name');
现在这个写法肯定不对,变量attr的推断是unknown,如何写函数getAttr的返回定义,才能让变量attr的推断为{age:number, name:string },就是函数传入了哪些key,就只返回这些key的推断
const obj = { name: 'Marcelo', age: 27, role: ['admin']};type ObjType = typeof objtype ObjKeyType = keyof ObjTypeconst getAttr = <T extends ObjKeyType>(...attributes: T[]): { [K in T]: ObjType[K] } => { const result = {} as { [K in T]: ObjType[K] }; for (const attr of attributes) { result[attr] = obj[attr]; } return result;};const attr = getAttr('age', 'name');
想到了,使用Pick就可以了,如下:
const obj = { name: 'Marcelo', age: 27, role: ['admin']};type ObjType = { [key in keyof typeof obj]: typeof obj[key]}const getAttr = <T extends ObjType, K extends keyof T>(...attribute: Array<K>): Pick<T, Array<K>[number]> => { const result = {}; for (const attr of attribute) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore result[attr] = obj[attr]; } return result as Pick<T, Array<K>[number]>;};const attr = getAttr('age', 'name');
有更好的答案,欢迎补充!
先上代码: 问题: 该如何定义函数testFn的data参数,才能让data的解构与DetailDataType的定义相符,并且编辑器有提示,现在data的解构全是any,如下: 求ts大神解答,谢谢!!!
本文向大家介绍javascript 对象数组根据对象object key的值排序,包括了javascript 对象数组根据对象object key的值排序的使用技巧和注意事项,需要的朋友参考一下 有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义: 使用: 以上就是本文的全部内
演示: https://tsplay.dev/NB6axN 代码: 结果: 传入 '/posts' 拿到 Promise<string[]> 传入 '/test' 拿到 Promise<number[]> 前置条件: 尽可能不要强行断言
type key 返回 none 表示不存在key。string字符类型,list 链表类型 set 无序集合类型…
问题内容: 我讨厌以下模式: 当嵌套图表示多维结构时,此示例仅会刮擦要编写的额外代码的表面。 我确定某个地方可以避免这种情况,但是我在Google搜索中所做的努力没有任何意义。 有什么建议? 问题答案: 的 和从Java 8 有 它返回映射到键的值,或者插入给定的值;如果没有为键映射任何值,则返回null。 如果您需要懒惰的价值评估,
问题内容: 因此,我尝试将Key转换为字符串,以便可以使用System.out显示它,然后将其转换回Key。我可以使用BASE64Encoder将其转换为字符串,但是在将其转换回时遇到问题。这是我的源代码: 问题答案: 您永远不会使用un-base-64您的字符串。 替换为: 与