developer tip

TypeScript 유형 배열 사용

copycodes 2020. 8. 30. 08:49
반응형

TypeScript 유형 배열 사용


다음과 같이 시작하는 TypeScript 클래스 정의가 있습니다.

module Entities {          

    export class Person {
        private _name: string;
        private _possessions: Thing[];
        private _mostPrecious: Thing;

        constructor (name: string) {
            this._name = name;
            this._possessions = new Thing[100];
        }

Thing 유형의 배열이 해당 Javascript 배열 유형으로 올바르게 변환되지 않는 것 같습니다. 다음은 생성 된 JavaScript의 스 니펫입니다.

function Person(name) {
    this._name = name;
    this._possessions = new Entities.Thing[100]();
}

Person 객체를 포함하는 코드를 실행하면 _possession 필드를 초기화하려고 할 때 예외가 발생합니다.

오류는 "0x800a138f-Microsoft JScript 런타임 오류 : '100'속성 값을 가져올 수 없습니다 : 개체가 null이거나 정의되지 않았습니다."입니다.

_possession 유형을로 변경하고 any[]_possession을 new Array()예외로 초기화하면 예외가 발생하지 않습니다. 내가 뭐 놓친 거 없니?


여기 구문에 오류가 있습니다.

this._possessions = new Thing[100]();

이것은 "사물의 배열"을 생성하지 않습니다. 사물의 배열을 만들려면 배열 리터럴 표현식을 사용하면됩니다.

this._possessions = [];

길이를 설정하려는 경우 배열 생성자 중 :

this._possessions = new Array(100);

놀이터 에서 시도해 볼 수있는 간단한 작업 예제를 만들었습니다 .

module Entities {  

    class Thing {

    }        

    export class Person {
        private _name: string;
        private _possessions: Thing[];
        private _mostPrecious: Thing;

        constructor (name: string) {
            this._name = name;
            this._possessions = [];
            this._possessions.push(new Thing())
            this._possessions[100] = new Thing();
        }
    }
}

이 중 하나를 시도해 볼 수 있습니다. 그들은 나에게 오류를주지 않습니다.

또한 배열 선언을 위해 typescript 에서 제안하는 방법입니다 .

를 사용하면 Array<Thing>typescript에서 제네릭을 사용합니다. List<T>C # 코드 를 요청하는 것과 비슷합니다 .

// Declare with default value
private _possessions: Array<Thing> = new Array<Thing>();
// or
private _possessions: Array<Thing> = [];
// or -> prefered by ts-lint
private _possessions: Thing[] = [];

또는

// declare
private _possessions: Array<Thing>;
// or -> preferd by ts-lint
private _possessions: Thing[];

constructor(){
    //assign
    this._possessions = new Array<Thing>();
    //or
    this._possessions = [];
}

The translation is correct, the typing of the expression isn't. TypeScript is incorrectly typing the expression new Thing[100] as an array. It should be an error to index Thing, a constructor function, using the index operator. In C# this would allocate an array of 100 elements. In JavaScript this calls the value at index 100 of Thing as if was a constructor. Since that values is undefined it raises the error you mentioned. In JavaScript and TypeScript you want new Array(100) instead.

You should report this as a bug on CodePlex.

참고URL : https://stackoverflow.com/questions/12870291/typescript-typed-array-usage

반응형