Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
使用动态值初始化TypeScript中的映射_Typescript - Fatal编程技术网

使用动态值初始化TypeScript中的映射

使用动态值初始化TypeScript中的映射,typescript,Typescript,是否可以使用运行时在TypeScript中生成的值初始化ReadOnlyMap?如果作为构造映射的一部分提供数组,则可以初始化映射,但如果通过变量将数组传递给它,则映射将失败。请参阅下面的代码 // Works. let X: ReadonlyMap<number, number> = new Map([ [0, 0], [1, 1], ]); let Y = [ [0, 0], [1, 1], ]; // Does not work. // Ar

是否可以使用运行时在TypeScript中生成的值初始化ReadOnlyMap?如果作为构造映射的一部分提供数组,则可以初始化映射,但如果通过变量将数组传递给它,则映射将失败。请参阅下面的代码

// Works.
let X: ReadonlyMap<number, number> = new Map([
    [0, 0],
    [1, 1],
]);

let Y = [
    [0, 0],
    [1, 1],
];

// Does not work.
// Argument of type 'number[][]' is not assignable to parameter of type 'ReadonlyArray<[number, number]>'.
// Type 'number[]' is missing the following properties from type '[number, number]': 0, 1
let Z: ReadonlyMap<number, number> = new Map(Y);

是否有其他方法可以在单个语句中构造映射?我希望避免新建空映射,为每个值调用set,然后将其引用复制到ReadonlyMap。

您是否尝试过显式键入输入数组?例如:

const Y: ReadonlyArray<[number, number]> = [
  [0, 0],
  [1, 1],
];


const Z: ReadonlyMap<number, number> = new Map<number, number>(Y);

谢谢因此,在我的问题中,TypeScript将默认的Y类型指定为数字[],这并不表示每个内部数组元素都至少有两个元素。声明Y的类型,并显式声明该限制。现在,我们不能在代码后面向Y追加空的内部数组。这为编译器停止抱怨提供了必要的保证。