Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有方法转换地图<;K、 V>;类型到对象类型?_Javascript_Typescript - Fatal编程技术网

Javascript 是否有方法转换地图<;K、 V>;类型到对象类型?

Javascript 是否有方法转换地图<;K、 V>;类型到对象类型?,javascript,typescript,Javascript,Typescript,比如说,我有: const keys = ["name","age"] as const; type values = [string, number]; const obj : Object<keys,values> = { name : "foo", age : 20 } // as Map<keys,values> valid ! const obj2 : Object<keys,valu

比如说,我有:

const keys = ["name","age"] as const;
type values = [string, number];

const obj : Object<keys,values> = {
    name : "foo", age : 20
} // as Map<keys,values> valid !

const obj2 : Object<keys,values> = {
    name : "foo"
} // as Map<keys,values> error, age is missing!


const obj3 : Object<keys,values> = {
    name : "foo", age : null
} // as Map<keys,values> error, age is not a number!
const key=[“name”,“age”]作为常量;
类型值=[字符串,数字];
常量对象:对象={
姓名:“富”,年龄:20岁
}//作为有效地图!
常量obj2:对象={
姓名:“富”
}//由于映射错误,缺少年龄!
常量obj3:对象={
姓名:“foo”,年龄:空
}//由于映射错误,年龄不是数字!

我想从键和值数组创建一个对象类型。我该怎么做?

这里有两个问题:

  • 对象
    类型不是您想要的类型对象表示任何非基元类型,并且不是泛型:

  • 普通JS对象的类型不同于
    Map
    对象,尽管它们都继承自对象原型

  • 解决方案:

    // Define correct type for your object
    type MyObject = {
      'name': string;
      'age': number;
    }
    
    const obj: MyObject  = {
      name: "foo",
      age: 20
    }
    
    // Create Map from object
    const map = new Map(Object.entries(obj));
    
    
    现在,
    map
    自动推断为粘贴自的
    map

    副本

    type key=['name','age']
    类型值=[字符串,数字]
    类型ZipTuple={
    [K in keyof T]:[T[K],K扩展了U的keyof?U[K]:从不]
    }
    类型KeyValTuplesToObject=ZipTuple<
    K
    v
    >[number]扩展推断Z
    ? [Z] 扩展[[任何,任何]]
    ? {[P in Z[0]]:提取[1]}
    :从不
    :从不
    类型Obj=KeyValTuplesToObject
    常量对象:对象={
    名称:“foo”,
    年龄:20
    }//作为有效地图!
    常量obj2:Obj={
    姓名:“富”
    }//由于映射错误,缺少年龄!
    常量obj3:Obj={
    名称:“foo”,
    年龄:零
    }//由于映射错误,年龄不是数字!
    
    没有值数组您想要一个
    映射
    还是一个
    记录
    ?@Bergi一个记录