javascript - Typescript: özel Hata sınıfı için argüman olarak tipler
Bir özel Error404 sınıfım ve bu hata yapıcısını geçirmek istediğim bir run fonksiyonum var:
class Error404 extends Error {
constructor(message: string) {
super(message);
this.name = "404";
this.message = message;
}
}
function run(MyErr: ErrorConstructor) {
throw new MyErr("test");
}
Ama onu çağırmayı denediğimde şunu alıyorum:
run(Error404)
^^^^^^^^
class Error404
Argument of type 'typeof Error404' is not assignable to parameter of type 'ErrorConstructor'.
Type 'typeof Error404' provides no match for the signature '(message?: string): Error'.ts(2345)
Ben neyi yanlış yapıyorum? Bunu nasıl düzeltebilirim?
Cevap #1
ErrorConstructor'un yalnızca new ile değil, aynı zamanda çağrılabilir şekilde de oluşturma olanağı sağladığını unutmayın:
interface ErrorConstructor {
new(message?: string): Error;
(message?: string): Error;
readonly prototype: Error;
}
declare var Error: ErrorConstructor;
Böylece, yeni Hata örnekleri şu şekilde oluşturulabilir:
new Error('message')Error('message')
Açıkça Error404 ikinci gereksinimi karşılamıyor - yalnızca new ile oluşturulabilir.
Şeyleri basit tutmaya çalışır ve run imzasını değiştirirdim:
class Error404 extends Error {
constructor(message: string) {
super(message);
this.name = "404";
}
}
function run(MyErr: new(message: string) => Error): never {
throw new MyErr('test');
}
run(Error404);
