“数字”类型的参数不能分配给“数字和字符串”类型的参数
Posted
技术标签:
【中文标题】“数字”类型的参数不能分配给“数字和字符串”类型的参数【英文标题】:Argument of type 'number' is not assignable to parameter of type 'number & string' 【发布时间】:2019-10-16 20:29:44 【问题描述】:我想在我的 ts 文件中使用 Array.prototype.includes
方法。
const id = this.selectedItem.id;
ids.includes(id);
其中ids
是一个数字数组。
我总是得到一个编译错误:
Argument of type 'number' is not assignable to parameter of type 'number & string'
当显式将 id 转换为数字 Number(id)
时,我还会看到 Type number is not assignable to type string
。
当我明确地将 id 转换为字符串id.toString()
时,我可以看到Type string is not assignable to type number
。
这是压倒性的。如何在 TypeScript 中使用 includes
方法?如何在我的示例中使用它?
[编辑] 扩展示例:
interface State extends EntityState<IItem>
this.stateSubscription = this.store.select((state: State) => state.items).subscribe(
val =>
const selectedId = this.selectedItem ? this.selectedItem.id : null;
val.ids.includes(selectedId);
));
val.ids.includes(selectedId as any)
也不起作用。
【问题讨论】:
【参考方案1】:您已将ids
声明为number[] & string[]
这意味着您提供给方法的参数应该是number[] & string[]
类型。
尝试将其声明为number[] | string[]
,这是其中之一,而不是两者。
【讨论】:
可能你有权利,但是这个接口是ngrx/entity
预定义的东西。我试过const ids: string[] | number[] = val.ids;
,但没有结果。
试过 ids.includes(selectedId as any)
但是:Cannot invoke an expression whose type lacks a call signature. Type '((searchElement: string, fromIndex?: number) => boolean) | ((searchElement: number, fromIndex?: number) => boolean)' has no compatible call signatures.
@krzyhub 你能提供一个minimal reproducible example你的问题吗?
@krzyhub 我不是在谈论扩展示例,而是在谈论您在stackblitz.com 上制作的minimal reproducible example:没有您工作的上下文(库、效果等) ,除了这些,我真的无能为力了
我觉得这个案子不值得。我会尝试Array.prototype.includes
以外的其他方法,因为 TS 实在是太烂了。感谢您的努力。以上是关于“数字”类型的参数不能分配给“数字和字符串”类型的参数的主要内容,如果未能解决你的问题,请参考以下文章
获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'
颤振列表错误参数类型'List'不能分配给参数类型'String'
参数类型“对象?”不能分配给参数类型'String'最新版本