使用动态值初始化TypeScript中的映射
是否可以使用运行时在TypeScript中生成的值初始化ReadOnlyMap?如果作为构造映射的一部分提供数组,则可以初始化映射,但如果通过变量将数组传递给它,则映射将失败。请参阅下面的代码使用动态值初始化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
// 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追加空的内部数组。这为编译器停止抱怨提供了必要的保证。