필요한 것은 매우 간단합니다. 초기화중인 다른 개체의 자식 인 개체를 초기화하고 싶습니다. C #에서는 다음과 같이 보입니다.
var car = new Car {
serialNumber = 25,
engine = new Engine {
horsePower = 500
}
}
이 예제 코드에서는 Car 유형의 초기화 내에서 Engine 유형을 초기화하고 있습니다. TypeScript로 이것을 시도하는 동안 구문 오류가 발생합니다.
내 TypeScript 코드는 다음과 같습니다.
var car: Car = new Car({
serialNumber: 25,
engine: new Engine({
horsePower: 500
})
});
이 코드 블록은 작동하지 않으며 여기에서 코드에 사용 된 모든 클래스를 분명히 가져옵니다.
이것이 TypeScript에서 지원되지 않는 것과 같은 기본 기능이 될 수 있습니까?
편집 :이 클래스에는 생성자가 없습니다. 그 모습은 다음과 같습니다.
export class Car {
serialNumber: number;
engine: Engine;
}
확실히 할 수 있습니다. 올바른 생성자 인자를 전달하기 만하면됩니다.
작성한 코드는 키가있는 단일 생성자 인수 객체를 전달합니다. 따라서 수업은 다음과 같아야합니다.
class Car {
constructor(args: { serialNumber: number; engine: Engine; }) { }
}
class Engine {
constructor(args: { horsePower: number; }) { }
}
그러나 클래스가 다음과 같이 명명 된 여러 생성자 인수를 사용하는 경우 :
class Car {
constructor(serialNumber: number, engine: Engine) { }
}
class Engine {
constructor(horsePower: number) { }
}
그런 다음 생성자 인수를 올바르게 전달하기 만하면됩니다.
const car: Car = new Car(25, new Engine(500));
편집하다
성가신 생성자를 만들어야합니다.
약간 혼란 스럽습니다. 원래 코드는 클래스를 사용하므로 할당을 사용하여 각 속성을 추가하지 않는 한 이미 생성자가 있어야합니다. 완전한 예를 게시하십시오.
중첩 된 객체 리터럴 구조를 생성하려는 경우 인터페이스가 필요한 다음 일반 JS 객체 리터럴 표기법을 사용하여 객체를 생성합니다.
interface Car {
serialNumber: number;
engine: Engine;
}
interface Engine {
horsePower: number;
}
const car: Car = {
serialNumber: 25,
engine: {
horsePower: 500
}
};
객체 리터럴을 클래스 유형에 할당하려는 경우 잘못하고있는 것입니다. :)
2 편집
따라서 속성이 있고 생성자가없는 클래스가 있습니다. 즉, 중첩되거나 한 번에 하나씩 속성으로 인스턴스화 할 수 없습니다. 당신은 할 수 클래스와 할당 속성을 인스턴스화하는 일반 도우미 함수를 작성 :
function create<T>(constructor: new() => T, props: Partial<T>): T {
let instance = new constructor();
for (let key in props) {
instance[key] = props[key];
}
return instance;
}
그런 다음 다음과 같이 중첩 된 클래스 개체를 만듭니다.
const car = create(Car, {
serialNumber: 123,
engine: create(Engine, {
horsePower: 456
})
});
그러나 클래스에 실제로 속성이 있다면 인터페이스와 객체 리터럴을 사용하는 것이 더 나을 것이라고 생각합니다 (이전 예제에서와 같이).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다