typescript - 'string | 类型的参数 number' 不可分配给“number”类型的参数
问题描述
用示例方法修改问题到最后: -
我有一个如下所示的用于输入对象的界面。
export interface IList{
name: string;
age: number;
option: number;
quantity: number;
priority: number;
}
由于某些要求,我必须在所有操作结束时为“优先级”属性分配一个“字符串”,然后再将其发送到后端。
因为我必须分配一个字符串,所以我尝试使用联合运算符:-
优先级:数字 | 细绳; 但是,无论我在哪里使用其他操作,考虑到这个数字,所有其他代码段也会给我带来以下错误:
Argument of type 'string | number' is not assignable to parameter of type 'number'
Type 'string' is not assignable to type 'number'.
我如何解决这个问题并将优先级用作字符串和数字来键入我的对象。
这是我使用“IList”接口作为类型并在 multiGroupHeader 为真时分配一个数字的一种情况,否则我必须分配一个字符串:-
public updatePriorities(Lists: IList[]) {
if (!this.multiGroupHeader) {
const priorities = Lists.map((list: IList) => list.priority);
const uniquePriorities = [...new Set(priorities)];
if (uniquePriorities.length === 1 && uniquePriorities[0] === 1) {
return;
}
uniquePriorities.sort((priority1: number, priority2: number) => priority1 - priority2);
const updatedPriorities = uniquePriorities.map((priority: number, index: number) => {
return index + 1;
});
uniquePriorities.forEach((id: number, index: number) => {
Lists.forEach((list: IList) => {
if (list.priority === id) {
list.priority = updatedPriorities[index];
}
});
});
} else {
Lists.forEach((list: IList) => (list.priority = "CURRENT"));
}
}
解决方案
解决此问题的一种方法是在将类型传递给只需要字符串或数字的函数之前断言/缩小类型:
if (typeof list.priority === 'number') {
// list.priority's type inside these braces is only 'number'
}
还有其他方法可以断言变量的类型:https ://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions
推荐阅读
- node.js - 为什么该按钮在 Google 助理中不起作用?
- office365 - Office - js创建段落副本
- r - 将 R Markdown 渲染为 HTML 时出现“gregexpr 错误”
- android - 在边框中添加两种颜色(android)?
- angular - Angular 我无法从服务器获取图像
- mariadb - 在 MariaDB 上设置 innodb_tmpdir
- javascript - 在单击事件完成之前执行以下代码
- android - Android - 带有 ImageView、LRUcache 和 ViewHolder 的滞后 ListView
- c - 在 C 中创建井字游戏 - 数组不显示更改,不返回错误消息
- amazon-web-services - DynamoDB 记录大小随时间增加