TypeScript에서 클래스 생성자 오버로드를 생성하는 방법은 무엇입니까?
9096 단어 typescript
TypeScript에서 class constructors에 대한 오버로드를 생성하려면
constructor
키워드와 ;
기호(세미콜론)로 끝나는 매개변수 대괄호를 사용해야 하며 원래 생성자 바로 위에 작성해야 합니다. 정의 자체.생성자 오버로드는 function overloads in TypeScript 과 유사합니다.
TL;DR
// a simple class
class Car {
name: string;
yearMade: number;
// constructor overload here
constructor(yearMade: number);
constructor(yearOrName: any, yearMade?: any) {
// check for types and then
// do assignment to fields if needed
// now we are just assiging it
// without checking for the types
this.name = yearOrName;
this.yearMade = yearMade;
}
}
예를 들어
Car
유형을 갖는 name
및 숫자 string
를 갖는 yearMade
와 같은 2개의 필드가 있는 type
라는 클래스와 다음과 같이 해당 필드의 값을 초기화하는 생성자가 있다고 가정해 보겠습니다.// a simple class
class Car {
name: string;
yearMade: number;
constructor(name: string, yearMade: number) {
this.name = name;
this.yearMade = yearMade;
}
}
이제
yearMade
라는 하나의 매개변수만 허용하는 생성자 오버로드를 만들려면 다음과 같이 원래 생성자 정의 위에 새 생성자 오버로드 정의를 작성해야 합니다.// a simple class
class Car {
name: string;
yearMade: number;
// constructor overload here
constructor(yearMade: number);
constructor(name: string, yearMade: number) {
this.name = name;
this.yearMade = yearMade;
}
}
그러나 새로운 생성자 오버로드를 추가하자마자 TypeScript에서
This overload signature is not compatible with its implementation signature.
라는 오류가 발생하기 때문에 위 코드에서 정리해야 할 것이 하나 더 있습니다. 방금 작성한 생성자 오버로드는 원래 생성자 정의 자체에서와 같이 매개 변수에 호환되는 유형이 있어야 하기 때문입니다.따라서 우리의 경우 첫 번째 매개변수
yearMade
는 생성자 오버로드에서 number
유형을 갖지만 원래 정의에는 name
유형을 갖는 매개변수 string
가 있습니다.따라서 호환 가능한 유형으로 만들기 위해 지금은 원래 정의 매개변수에
any
유형을 사용하고 원래 생성자 정의에서 두 번째 매개변수yearMade
를 선택적으로 사용하고 ?
기호(물음표)를 사용합니다. 우리가 작성한 오버로드에는 하나의 매개변수만 있기 때문에 두 번째 매개변수를 선택적으로 만들고 있습니다.다음과 같이 할 수 있습니다.
// a simple class
class Car {
name: string;
yearMade: number;
// constructor overload here
constructor(yearMade: number);
constructor(name: any, yearMade?: any) {
this.name = name;
this.yearMade = yearMade;
}
}
가독성을 위해 원래 생성자의 첫 번째 매개변수 이름을
yearOrName
로 지정하겠습니다. 이름이나 연도를 모두 허용할 수 있기 때문입니다.// a simple class
class Car {
name: string;
yearMade: number;
// constructor overload here
constructor(yearMade: number);
constructor(yearOrName: any, yearMade?: any) {
// check for types and then
// do assignment to fields if needed
// now we are just assiging it
// without checking for the types
this.name = yearOrName;
this.yearMade = yearMade;
}
}
생성자의 본문은 이상적으로 유형을 확인한 다음 클래스 필드에 값을 할당해야 하지만 여기서는 숙제로 남겨두겠습니다.
TypeScript에서 클래스 생성자 오버로드를 성공적으로 만들었습니다. 예이 🥳!
codesandbox에 있는 위의 코드를 참조하십시오.
그게 다야 😃!
이 정보가 유용하다고 생각되면 자유롭게 공유하세요 😃.
Reference
이 문제에 관하여(TypeScript에서 클래스 생성자 오버로드를 생성하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/melvin2016/how-to-create-class-constructor-overloads-in-typescript-2iap텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)