생성자가 서명 new와 일치하지 않습니다.
이 경우 "컴파일" 문제가 있습니다.
interface IDataObjectConstructor {
new (objJSON?: any): myDataObject;
}
class myDataObject implements IDataObjectConstructor {
constructor(objJSON: any = null) {
for (var prop in objJSON) {
this[prop] = objJSON[prop];
}
}
}
다음과 같이 표시됩니다.
클래스 'myDataObject'가 인터페이스 '를 잘못 구현함IDataObjectCurrent'입니다.
'myDataObject' 유형은 'new(obJJSON?: any): myDataObject' 서명과 일치하는 항목을 제공하지 않습니다.
마지막으로 이 개체를 다음과 같이 사용합니다.
class viewModelList<T extends myDataObject>{
item: T;
constructor(itemType: T) { this.item = itemType; }
itemBuilder(json?) { return new this.item(json); }
}
class derivedDataObject extends myDataObject{
constructor(objJSON: any = null) { super(objJSON); }
}
class derivedViewModelList extends viewModelList<derivedDataObject>{
constructor() { super(derivedDataObject); }
}
let oManager = new derivedViewModelList();
클래스의 정적 측과 인스턴스 측의 차이
클래스와 인터페이스를 사용할 때 클래스에는 정적 측 유형과 인스턴스 측 유형의 두 가지 유형이 있습니다.구성 서명이 있는 인터페이스를 만들고 이 인터페이스를 구현하는 클래스를 만들려고 하면 다음 오류가 발생할 수 있습니다.
interface ClockConstructor {
new (hour: number, minute: number);
}
class Clock implements ClockConstructor { // error
constructor(h: number, m: number) { }
}
클래스가 인터페이스를 구현할 때 클래스의 인스턴스 쪽만 확인하기 때문입니다.생성자는 정적 측에 있으므로 이 검사에는 포함되지 않습니다.
대신, 당신은 수업의 정적인 측면과 직접적으로 협력해야 할 것입니다.이 예에서는 생성자를 위한 ClockConstructor와 인스턴스 메서드를 위한 ClockInterface라는 두 가지 인터페이스를 정의합니다.그런 다음 편의를 위해 전달되는 유형의 인스턴스를 만드는 생성자 함수 createClock을 정의합니다.
interface ClockConstructor {
new (hour: number, minute: number): ClockInterface;
}
interface ClockInterface {
tick();
}
function createClock(ctor: ClockConstructor, hour: number, minute: number): ClockInterface {
return new ctor(hour, minute);
}
class DigitalClock implements ClockInterface {
constructor(h: number, m: number) { }
tick() {
console.log("beep beep");
}
}
class AnalogClock implements ClockInterface {
constructor(h: number, m: number) { }
tick() {
console.log("tick tock");
}
}
let digital = createClock(DigitalClock, 12, 17);
let analog = createClock(AnalogClock, 7, 32);
왜냐면createClock
의 첫 번째 매개 변수는 ClockConstructor 유형입니다.createClock(AnalogClock, 7, 32)
AnalogClock에 올바른 생성자 서명이 있는지 확인합니다.
자동으로 발생하는 생성자 인터페이스를 구현하기 위해 클래스가 필요하지 않습니다.
예:
interface IDataObjectConstructor {
new (objJSON?: any): myDataObject;
}
class myDataObject {
constructor(objJSON: any = null) {
for (var prop in objJSON) {
this[prop] = objJSON[prop];
}
}
}
function factory(ctor: IDataObjectConstructor) {
return new ctor();
}
let o = factory(myDataObject);
그factory
함수는 다음을 기대합니다.IDataObjectConstructor
그리고 우리는 수업 자체를 통과하고 있고 당신의 수업이 그것을 구현한다고 선언되지 않았음에도 불구하고 당신은 어떠한 컴파일 오류도 얻지 못합니다.
언급URL : https://stackoverflow.com/questions/37654840/constructor-provides-no-match-for-signature-new
'programing' 카테고리의 다른 글
애플리케이션을 릴리스하기 전에 NSLog를 비활성화해야 합니까? (0) | 2023.06.16 |
---|---|
C/C++의 열에 주조 (0) | 2023.06.16 |
Firebase와 함께 NodeJs 사용 - 보안 (0) | 2023.06.16 |
상위 구성 요소를 통해 pinia 저장소 액세스 (0) | 2023.06.16 |
마이그레이션을 추가해도 작동하지 않고 유용한 오류 메시지가 표시되지 않음 (0) | 2023.06.16 |