Тип 'string' не может быть назначен для ошибки enum типа - PullRequest
1 голос
/ 04 мая 2020

У меня есть следующий интерфейс:

export interface Preferences {
  theme: Theme;
}

с Theme, определяемым как enum:

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'.

1 Ответ

0 голосов
/ 04 мая 2020

Если вы уверены, что имеются действительные JSON данные предпочтений, вы можете просто указать компилятору TypeScript использовать prefExample объект как Preferences, например:

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