생성자없이 다른 객체 초기화 내에서 객체를 초기화 할 수 있습니까?

Bodokh

필요한 것은 매우 간단합니다. 초기화중인 다른 개체의 자식 인 개체를 초기화하고 싶습니다. 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;
}
Aaron Beall

확실히 할 수 있습니다. 올바른 생성자 인자를 전달하기 만하면됩니다.

작성한 코드는 키가있는 단일 생성자 인수 객체를 전달합니다. 따라서 수업은 다음과 같아야합니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

생성자의 초기화 목록에서 새 객체를 초기화하고 참조 할 수 있습니까?

초기화 목록에서 생성자 다음에 변수/객체를 어떻게 초기화할 수 있습니까?

다른 클래스의 생성자의 도움으로 객체를 초기화 할 수 있습니까?

객체 초기화를 단순화 할 수 있습니다.

onAttach에서 인터페이스 객체를 초기화 할 수 없습니까?

Rails : 초기화 프로그램에서 클래스의 객체를 생성 할 수 없습니다.

wx.App이 생성되기 전에 wx.Font 객체를 어떻게 초기화 할 수 있습니까?

Java: 객체 생성/초기화를 연기할 수 있습니까?

파이썬에서 다른 객체로 목록을 초기화 할 수없는 이유는 무엇입니까?

json 파일에서 로드된 데이터로 json 객체를 초기화할 수 없습니다.

Java의 생성자 및 클래스를 마스터 할 수 없습니다 (객체 초기화).

클래스 객체를 초기화 할 수 없습니다 : Objective-C

생성자가 초기화되면 객체의 배열을 어떻게 초기화 할 수 있습니까? C ++

생성자가 초기화되면 객체의 배열을 어떻게 초기화 할 수 있습니까? C ++

이 mutexattr로 초기화 된 mutex가 사용되기 전에 mutexattr 객체를 제거 할 수 있습니까?

init () 중에 객체 초기화를 어떻게 취소 할 수 있습니까?

객체에 포인터를 전달할 때 일치하는 생성자 초기화 문제가 없습니다.

if 문에서 다른 유형의 개체를 초기화할 수 있습니까?

파일로 IThumbnailProvider 객체를 초기화 할 수 있습니까?

Hibernate가 프록시를 초기화 할 수 없습니다-스레드 내에서 객체에 액세스 할 때 세션이 없습니다.

비 const 참조를 다른 유형의 객체로 초기화 할 수없는 이유는 무엇입니까?

내부 객체를 초기화하지 않고 어레이를 용량으로 초기화 할 수 있습니까?

Dart 클래스에는 객체 초기화 시 실행할 수 있는 기능이 있습니까?

객체 초기화에서 할당 연산자에 의해 생성자에 매개 변수를 전달할 수있는 이유는 무엇입니까?

Kotlin-컴패니언 객체 값을 초기화 할 수 없습니다.

쉽게 구성 할 수없는 객체의 배열을 초기화합니다.

Java의 특정 조건에 따라 다른 객체로 동일한 변수 이름을 초기화 할 수 있습니까?

키가 객체 인 파이썬에서 사전을 어떻게 초기화 할 수 있습니까?

생성자 내에서 객체의 ArrayList를 초기화하는 데 문제가 있습니다.