【发布时间】:2020-12-20 15:29:15
【问题描述】:
当使用类型谓词和返回语句时,我希望数组函数能够缩小 dashArray 的类型。
- 如果 TypeScript 编译器更聪明的话,它是否可以合理地做到这一点,还是我期望这样的事情是错误的?
- 如何重写才能按预期工作?
export function parseAsDashArray(str: string | null): number[] | null {
if (!str) {
return null;
}
const values = str.split(/[\s,]+/g);
const dashArray = values.map((v) => parseAsPercentLength(v));
if (dashArray.some(isNull)) {
return null;
}
if (isOdd(dashArray.length)) {
dashArray.concat(dashArray);
}
return dashArray;
}
export function isNull(val: any): val is null {
return val === null;
}
export function parseAsPercentLength(val: string): number | null { ... }
编辑:这是我尝试粘贴到 TypeScript 游乐场的完整示例。
https://www.typescriptlang.org/play
function parseAsDashArray(str: string | null): number[] | null {
if (!str) {
return null;
};
const values = str.split(/[\s,]+/g);
const dashArray = values.map(parseAsPercentLength);
if (dashArray.some(el => el == null)) {
return null;
}
if (dashArray.length % 2 == 1) dashArray.concat(dashArray);
return dashArray;
}
function parseAsPercentLength(val: string): number | null {
return Number.parseFloat(val)
}
类型“(number | null)[]”不可分配给类型“number[]”。类型 '号码 | null' 不可分配给类型 'number'。类型'null'不是 可分配给类型“数字”。
【问题讨论】:
-
您的错误究竟是什么?我粘贴了你的代码,它工作得很好
-
@Zer0:我添加了一个编辑。我使用了您的代码示例。
标签: arrays typescript