类型'string'不可分配给类型枚举错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型'string'不可分配给类型枚举错误相关的知识,希望对你有一定的参考价值。

我的界面如下:

export interface Preferences {
  theme: Theme;
}

[Theme被定义为枚举:

export enum Theme {
  dark = 'dark',
  light = 'light'
}

假设我有如下的JSON文件:

{
  "theme": "light"
}

还假设我想按如下所示在服务中使用它:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { Preferences } from '../models/preferences';
import prefExample from '../../assets/preferences.json';

@Injectable({
  providedIn: 'root'
})
export class MyService {

  constructor(private httpClient: HttpClient) { }

  getPreferences(): Observable<Preferences> {
    return of(prefExample);
  }
}

当我尝试运行上面的代码时,它告诉我:

Types of property 'theme' are incompatible.
  Type 'string' is not assignable to type 'Theme'.
答案

尝试强制类型注释,例如:

return of(prefExample as Preferences);
另一答案

如果您确定Preferences的有效JSON数据,您可以告诉TypeScript编译器将prefExample对象用作Preferences,如下所示:

getPreferences(): Observable<Preferences> {
    return of(prefExample as Preferences);
}

以上是关于类型'string'不可分配给类型枚举错误的主要内容,如果未能解决你的问题,请参考以下文章

键入'键:字符串; ' 不可分配给类型 'Product' Angular 7

Typescript类型'string'不能分配给类型

在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。

类型'字符串|的参数用户'不能分配给'string'类型的参数

类型“数字”不可分配给类型“字符串”。如何将数字转换为字符串

无法将类型为'Void'的值分配为类型为'String?'