Свойство TypeScript: массив вызывает эту ошибку при заполнении: «Ошибка типа: невозможно установить свойство« 0 »из неопределенного» - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю с машинописью впервые, и вот моя проблема.

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

class FileSystemStatistics{
    public number: number;
    public name: string[];
    public size: number;
    public used: number;
    public usedPercent: number;
    public physicalLocation: string;
}

Я анализирую ПК на наличие жестких дисков и, как ожидается, он возвращаетих массив.Для тестирования я просто сделал свойство name массивом типа string.Теперь я просто хочу присвоить name [0] имя первого жесткого диска, name [1] имя второго жесткого диска и т. Д.

Для этого я делаю следующее:

var fsObject = new FileSystemStatistics();
//testing if HDs are returned as an array consisting of objects. fs is the name (e.g. C:) 
console.log(fsSize[0].fs); //--> C:
console.log(fsSize[1].fs); //--> G:
fsObject.name[0] = fsSize[0].fs;
fsObject.name[0] = fsSize[0].fs;

В моем коде нет ошибок, помеченных, но когда я хочу запустить его, я получаю сообщение об ошибке:

"UnhandledPromiseRejectionWarning: TypeError: Невозможно установить свойство '0' из неопределенного"

Я почти уверен, что совершаю ошибку новичка, но не могу ее исправить даже после поиска в Google.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Проблема на самом деле не в машинописи, а в том, как вы относитесь к своему классу.Вы должны вручную присвоить пустой массив вашему свойству name, поэтому вместо

class FileSystemStatistics{
    public number: number;
    public name: string[];
    public size: number;
    public used: number;
    public usedPercent: number;
    public physicalLocation: string;
}

должно быть не менее

class FileSystemStatistics{
    public number: number;
    public name: string[] = [];
    public size: number;
    public used: number;
    public usedPercent: number;
    public physicalLocation: string;
}

То, что вы сделали с выражением public name: string[], это то, что вы толькоотметьте, что свойство name должно быть массивом (или неопределенным / недействительным), но не массивом с числами, например

...
public name: string[] = [1,2,3]; // would gave an error

Попробуйте проверить, какой код будет у вас во время выполнения на детской площадке https://www.typescriptlang.org/play/index.html

Обрабатывать машинописный текст как расширенный набор javascript, который существует только перед компиляцией и генерировать javascript.С точки зрения кода времени выполнения, который вы на самом деле тестировали и который дал вам ошибку в вашем посте - у вас была простая функция конструктора, которая генерирует пустой объект

, и вы пытались достичь - использовать свойпустой объект с именем fsObject в таком выражении

fsObject; // {}
fsObject.name // which is already undefined
fsObject.name[0] // this is where you get runtime error with undefined treated as array
0 голосов
/ 20 февраля 2019

Созданный вами класс FileSystemStatistics не имеет начального значения.Это означает, что fsObject.name равно undefined.Вы можете избежать этой проблемы, указав начальное значение для свойства name.

class FileSystemStatistics{
    public name: string[] = [];
}

Выходные данные отображаются внутри площадки TypeScript .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...