错误 TS2345:“菜单”类型的参数不可分配给类型参数

Posted

技术标签:

【中文标题】错误 TS2345:“菜单”类型的参数不可分配给类型参数【英文标题】:error TS2345: Argument of type 'Menu' is not assignable to parameter of type 【发布时间】:2018-10-19 01:59:27 【问题描述】:

美好的一天。我是 Type Script 的新手,使用 VSCode。

得到以下错误

error TS2345: Argument of type 'Menu' is not assignable to parameter of type ' state: string; name: string; type: string; icon: string;
 badge?: undefined; children?: undefine...'

代码

import  Injectable  from '@angular/core';

export interface BadgeItem 
  type: string;
  value: string;


export interface ChildrenItems 
  state: string;
  name: string;
  type?: string;


export interface Menu 
  state: string;
  name: string;
  type: string;
  icon: string;
  badge?: BadgeItem[];
  children?: ChildrenItems[];


const MENUITEMS = [
  
    state: '/',
    name: 'HOME',
    type: 'link',
    icon: 'explore'
  ,
  
    state: 'account',
    name: 'ACCOUNT',
    type: 'sub',
    icon: 'explore',
    badge: [
      type: 'purple', value: 'new'
    ],
    children: [
        state: 'users', name: 'USERS',
    ]
  
];

@Injectable()
export class MenuService 
  getAll(): Menu[] 
    return MENUITEMS;
  

  add(menu: Menu) 
    MENUITEMS.push(menu);
  

我们将不胜感激。

【问题讨论】:

MENUITEMS的第一项设置为 state: '/', name: 'HOME', type: 'link', icon: 'explore', badge: [], children: [] 我更改了代码,但仍然出现同样的错误。 解决这个问题的正确方法是给你的 MENUITEMS 一个合适的类型来帮助 TypeScript 编译器。 const MENUITEMS: Menu[] = [...] ***.com/questions/17220114/… 【参考方案1】:

只需像下面这样指定MENUITEMS的类型,警告就会消失

const MENUITEMS : Menu[] = [
  
    state: '/',
    name: 'HOME',
    type: 'link',
    icon: 'explore'
  ,
  
    state: 'account',
    name: 'ACCOUNT',
    type: 'sub',
    icon: 'explore',
    badge: [
      type: 'purple', value: 'new'
    ],
    children: [
        state: 'users', name: 'USERS',
    ]
  
];

【讨论】:

以上是关于错误 TS2345:“菜单”类型的参数不可分配给类型参数的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5 错误 TS2345:“数字”类型的参数不可分配给“字符串”类型的参数

类型“null”不可分配给类型“元素”.ts(2345)

TS2345 类型参数...不可分配给类型参数

打字稿键盘事件:“事件”类型的参数不可分配给“键盘事件”类型的参数

Angular 2 错误指令

错误 TS2322:类型“Object[]”不可分配给类型“[Object]”