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
'developer tip' 카테고리의 다른 글
요소에 Javascript에 자식이 있는지 확인하는 방법은 무엇입니까? (0) | 2020.08.30 |
---|---|
Rails 환경에서 Ruby 파일을 어떻게 실행하나요? (0) | 2020.08.30 |
Symfony2 요청 객체의 POST 값에 액세스 (0) | 2020.08.29 |
AFHTTPClient의 실패 블록에서 http 상태 코드를 얻는 쉬운 방법이 있습니까? (0) | 2020.08.29 |
"this"는 맵 함수 Reactjs 내부에서 정의되지 않았습니다. (0) | 2020.08.29 |