typescript ngrx类型不匹配(字符串|数字)[]和字符串[] |数字[]

时间:2018-05-23 01:25:54

标签: angular typescript ngrx ngrx-entity

我正在尝试使用以下其他库将我的角度应用升级到5.2.10: ngrx 5.2.0 打字稿:2.6.2 tslint 5.10.0

并在角度编译期间遇到以下错误:

`

ERROR in src/app/**/xxx-state.ts(301,5): error TS2322: Type '(string | number)[]' is not assignable to type 'string[] | number[]'.
  Type '(string | number)[]' is not assignable to type 'number[]'.
    Type 'string | number' is not assignable to type 'number'.
      Type 'string' is not assignable to type 'number'.
src/app/***/xxx-state.ts(305,5): error TS2322: Type '(string | number)[]' is not assignable to type 'string[] | number[]'.
  Type '(string | number)[]' is not assignable to type 'number[]'.

`

`

error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '((searchElement: string, fromIndex?: number) => number) | ((searchElement: number, fromIndex?: nu...' has no compatible call signatures.

`

我正在使用@ngrx / entity库从ngrx的'module.d.ts'文件中定义的以下EntityState接口派生我们的数据状态接口。

`

export interface EntityState<T> {
    ids: string[] | number[];
    entities: Dictionary<T>;
}

`

任何解决这些错误的指针?

1 个答案:

答案 0 :(得分:1)

(string|number)[]是一个可以包含字符串或数字元素的数组

string[] | number[]是一个字符串数组或一组数字。

首先允许像[1, "2", 3]这样的数组,第二个不允许它们。因此编译器抱怨,为了您的安全。解决方案:只使用其中一个。