Visual Studio 2015 및 Typescript 2.0.3.0을 사용하고 있습니다.추상 함수에서 제네릭을 반환 할 때 Typescript가 타이핑하지 않습니다.
내 기본 클래스에는 Promise를 반환하는 추상 메서드가있는 매우 간단한 상속 모델이 있습니다.
위에서 볼 수 있듯이 기본 클래스는 제네릭을 사용하여 하위 클래스에서 사용중인 모델 유형 (이 경우 TModel)을 제한합니다.
Generate를 반환하는 GetVehicle을 선언 할 때 Typescript는 하위 클래스 (GrandPrix)에서 "Car"유형을 반환하도록 강제합니다.
관심의interface IVehicle {
Name:string;
}
class Car implements IVehicle {
Name: "CAR";
}
class MotorBike implements IVehicle {
Name: "MotorBike";
}
abstract class Race<TModel extends IVehicle> {
protected abstract GetVehiclePromise(): Promise<TModel>;
protected abstract GetVehicle(): TModel;
}
class GrandPix extends Race<Car> {
// This works - it has to be type 'Car'
protected GetVehicle(): Car { return null; }
// This works, but SHOULD NOT - I can return Promise<anything_at_all> and it still compiles. Even something non-IVehicle like Promise<string>
protected GetVehiclePromise(): Promise<MotorBike> { return null; }
}
, 나는 또한 일반을 받아 다른 클래스와 약속의 사용을 대체하는 시도 : 나는 약속하는 반환 형식을 변경하는 경우
그러나, 타이프 라이터는 더 이상 반환 형식을 적용하지 않습니다 - 같은 문제 :
class Simple<T> {
ID: "";
}
abstract class Race<TModel extends IVehicle> {
protected abstract GetVehiclePromise(): Simple<TModel>;
}
class GrandPix extends Race<Car> {
// Also compiles when it should not
protected GetVehiclePromise(): Simple<MotorBike> { return null; }
}
그래서이 약속 <> 선언 문제가되지 않습니다, 그것은 제네릭 (내 생각)와 함께 할 것입니다.
미리 감사드립니다.
예, 당신 말이 맞아를! 업그레이드를 통해 첫 번째 문제가 해결되었습니다. 그리고 두 번째에 대한 설명을 위해 고마워요. 진실한 붉은 청어, 나는 두 번째 문제점이 나타나면 약속의 잠재적 인 문제를 일축했다. – Ben