Pracuję z maszynopisem po raz pierwszy i oto mój problem.

Mam następującą klasę:

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

Analizuję komputera na hardry i zgodnie z oczekiwaniami zwraca ich szereg. W celu testowania właśnie wykonałem nazwę właściwością tablicy sznurka typu. Teraz chcę po prostu przypisać nazwę [0] Nazwa pierwszego dysku twardego, nazwa [1] Nazwa drugiego dysku twardego itp.

Robię to, aby to osiągnąć:

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;

Nie ma błędów oznaczonych w moim kodzie, ale kiedy chcę go uruchomić, otrzymuję błąd:

"NiemowlętaPromisereationWarning: TypeError: Nie można ustawić właściwości" 0 "niezdefiniowanego"

Jestem pewien, że robię początkujący błąd, ale nie mogę go rozwiązać nawet po Googlingu.

0
stinsfire 20 luty 2019, 14:54

2 odpowiedzi

Najlepsza odpowiedź

Problem nie jest w rzeczywistości w maszynach, ale w drodze, jak traktujesz swoją klasę. Musisz ręcznie przypisać pustą tablicę do własności nazwy, więc zamiast

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

Powinno być przynajmniej

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

To, co zrobiłeś z public name: string[] wyrażeniem, jest to, że zaznaczasz tylko tę właściwość Nazwa powinna być tablicą (lub niezdefiniowaną / pustką), ale nie ma tablicy z liczbami na przykład

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

Spróbuj sprawdzić, jaki kod będziesz miał w czasie wykonywania na placu zabaw https://www.typescriptlang.org/play/index.html

Traktuj maszynopis: Superet JavaScript, który istnieje tylko przed kompilacją i wygeneruj JavaScript. Pod względem kodu wykonawczego, który faktycznie przetestowałeś i co dało im błąd w swoim poście - miałeś zwykłą funkcję jako konstruktor, który generuje pusty obiekt

A co próbowałeś osiągnąć, jest użycie twojego pustego obiektu o nazwie {x0}} w takim wyrazie

fsObject; // {}
fsObject.name // which is already undefined
fsObject.name[0] // this is where you get runtime error with undefined treated as array
2
Sergey Khrolenok 20 luty 2019, 12:09

Stworzona klasa FileSystemStatistics Nie ma żadnej wartości początkowej. Co oznacza, że fsObject.name jest undefined. Możesz uniknąć tego problemu, dostarczając wstępną wartość do właściwości {x3}}.

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

Możesz zobaczyć wyjście wewnątrz Plac zabaw typu.

1
Samuel Vaillant 20 luty 2019, 12:08