Typescript 摘要 class 没有实现没有错误
Typescript abstract class without implementation without errors
是否可以有一个带有强类型 public 方法但没有实现它们的抽象 class? 我知道它是一个接口,但我不能在 Angular 中将接口用于依赖注入作为标记。我需要一个结构供我的其他 classes 实现。
但是,如果我这样做:
abstract class AbstractService {
someMethod(): Observable<SomeType> {}
}
Typescript 将静态检查它并出错,因为它 return 不是声明的类型。
我想我可以在编译器代码中添加一些注释以防止 TS 检查,但它似乎很 hacky。
有没有办法防止打字稿这种检查和写?我的架构的很大一部分是 DI
的这个服务层系统
您需要将未实现的字段和方法标记为abstract
abstract class AbstractService {
abstract someMethod(): Observable<SomeType>
}
这也将强制执行 类 以实际执行方法:
// Error: Non-abstract class 'Service' does not implement inherited abstract member 'someMethod' from class 'AbstractService'
class Service extends AbstractService{
}
//ok, methods is implemented
class OkService extends AbstractService {
someMethod() {
throw new Error("Method not implemented.");
}
}
您可以阅读更多关于摘要的内容 类 here
给你。
abstract class Base {
public abstract hello(name: string): Promise<string>
public abstract goodbye(name: string): Promise<string>
}
如果您需要测试新的 class 但尚未实现所有方法。
class Human extends Base {
public hello(name: string) {
// your implementation
}
public goodbye(name: string) {
return 'Not implemented yet' as unknown as Promise<string>;
}
}
是否可以有一个带有强类型 public 方法但没有实现它们的抽象 class? 我知道它是一个接口,但我不能在 Angular 中将接口用于依赖注入作为标记。我需要一个结构供我的其他 classes 实现。 但是,如果我这样做:
abstract class AbstractService {
someMethod(): Observable<SomeType> {}
}
Typescript 将静态检查它并出错,因为它 return 不是声明的类型。
我想我可以在编译器代码中添加一些注释以防止 TS 检查,但它似乎很 hacky。
有没有办法防止打字稿这种检查和写?我的架构的很大一部分是 DI
的这个服务层系统您需要将未实现的字段和方法标记为abstract
abstract class AbstractService {
abstract someMethod(): Observable<SomeType>
}
这也将强制执行 类 以实际执行方法:
// Error: Non-abstract class 'Service' does not implement inherited abstract member 'someMethod' from class 'AbstractService'
class Service extends AbstractService{
}
//ok, methods is implemented
class OkService extends AbstractService {
someMethod() {
throw new Error("Method not implemented.");
}
}
您可以阅读更多关于摘要的内容 类 here
给你。
abstract class Base {
public abstract hello(name: string): Promise<string>
public abstract goodbye(name: string): Promise<string>
}
如果您需要测试新的 class 但尚未实现所有方法。
class Human extends Base {
public hello(name: string) {
// your implementation
}
public goodbye(name: string) {
return 'Not implemented yet' as unknown as Promise<string>;
}
}