Ошибка углового типа: тип 'string' нельзя назначить типу 'string []' - PullRequest
0 голосов
/ 24 сентября 2018

Я очень новичок в angular и пытаюсь создать электронное приложение, использующее angular 6.

Я пытаюсь сделать следующее: 1. SupportInformationClass имеет несколько определений 2. При инициализацииComponentet, заполните определения из электронных настроек

supportInformation.ts:

export class SupportInformation  {

    appsSet1: string[];
    //appsSet2: string[];
    //appsSet3: string[];
    //appsSet4: string[];
}

configuration.componenet.ts:

import { SupportInformation } from './supportInformation';
...
...
export class ConfigurationComponent implements OnInit {

    supportInformation: SupportInformation;


    constructor(private childProcessService: ChildProcessService, private electronService: ElectronService) {
        console.log("inside constructor...")
    }

    ngOnInit() {
        console.log("on ngInit...");
        this.getSupportedApps();
    }

    getSupportedApps() {
        if(this.childProcessService.isElectronApp){

            // this.supportInformation.appsSet1 = ["wow"] // this works

            console.log(this.electronService.settings.get('APPS_1')) // this also works
            this.supportInformation.appsSet1 = this.electronService.settings.get('APPS_1'); // this gives an error
        }
    }
}

Я получаю сообщение об ошибке в этой конкретной строке, даже если this.electronService.settings.get ('APPS_1') возвращает массив строковых элементов.

this.supportInformation.appsSet1 = this.electronService.settings.get('APPS_1');

Ошибка:

Type 'JsonValue' is not assignable to type 'string[]'.
  Type 'string' is not assignable to type 'string[]'.

Мой файл настроек выглядит следующим образом:

{
...
    "APPS_1": ["abc", "def", "ghi", "jkl"],
    "APPS_2": ["mno", "pqr"],
...
}

console.log (this.electronService.settings.get ('APPS_1')) дает:

enter image description here

Я не могу понять, почему.Может ли кто-нибудь дать мне несколько советов относительно того же самого?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вам необходим JSON.parse для преобразования вашей строки в объект json:

import { SupportInformation } from './supportInformation';
...
...
export class ConfigurationComponent implements OnInit {

    supportInformation: SupportInformation;


    constructor(private childProcessService: ChildProcessService, private electronService: ElectronService) {
        console.log("inside constructor...")
    }

    ngOnInit() {
        console.log("on ngInit...");
        this.getSupportedApps();
    }

    getSupportedApps() {
        if(this.childProcessService.isElectronApp){

            // this.supportInformation.appsSet1 = ["wow"] // this works

            console.log(this.electronService.settings.get('APPS_1')) // this also works
            this.supportInformation.appsSet1 = JSON.parse(this.electronService.settings.get('APPS_1')); // this gives an error
        }
    }
}
0 голосов
/ 24 сентября 2018

Ладно, взяв подсказки, оставленные @codeSetter - <[string]>this.electronService.settings.get('APPS_1'), и с некоторой помощью из официального углового учебника следующее, кажется, работает нормально.Единственная проблема сейчас в том, что Я не знаю, ПОЧЕМУ это работает .

Ниже приведена реализация:

supportInformation.ts:

export class SupportInformation  {
    appsSet1: string[];
}

configuration.componenet.ts:

import { SupportInformation } from './supportInformation';
...
...

export class ConfigurationComponent implements OnInit {

  supportInformation: SupportInformation = {
        appSet1: []
  };
constructor(private childProcessService: ChildProcessService, private electronService: ElectronService) {
        console.log("inside constructor...")
    }

    ngOnInit() {
        console.log("on ngInit...");
        this.getSupportedApps();
    }

    getSupportedApps() {
        if (this.childProcessService.isElectronApp) {
            this.supportInformation.appSet1 = <[string]>this.electronService.settings.get('APPS_1');
        }
        console.log("this prints what I need: ", this.supportInformation);

    }

}
0 голосов
/ 24 сентября 2018

JSON.parse ваш ответ и затем назначьте.попробуйте это, я надеюсь, что это работает.https://stackblitz.com/edit/angular-mrejs1?file=src/app/app.component.ts

...