С учетом следующих строк
const a: Array<number> = [1,2,3];
const b = [1,2,3];
const q: Array<boolean | number> = a;
const r: Array<boolean | number> = b;
Приведенный выше код работает для строк 2 и 4 (b
и r
), однако поток прерывается на строке 3 с ошибкой:
Невозможно присвоить a
для q
, поскольку число [1] несовместимо с логическим [2] в элементе массива.
Это не имеет большого смысла для меня, особенно с учетом строкиниже работает.Почему это не работает, и как я могу заставить его работать?
Что касается приложения выше: в моем реальном рабочем коде у меня есть функция, которая принимает любой «простой объект javascript» (объектбез функций).Который я описал следующим образом:
type primitive = boolean | number | string | void;
type plain_js_object = {
[string]: (primitive | Array<primitive> | plain_js_object)
}
function theFunction(input: plain_js_object) {
//do_things
return JSON.stringify(input);
}
А потом у меня есть другая функция, которая возвращает массив целых чисел, функция затем вызывается следующим образом:
const fib = [1, 1, 2, 3, 5];
theFunction({sequence: fib});
Очевидно, {sequence: fib}
являетсятипа {sequence: Array<number>}
, который, очевидно, является подтипом простых объектов javascript.