我注意到一个非常奇怪的行为,它试图拥有一个带有泛型参数的子类.
// no error for this code
abstract class BaseClass<Input extends object, Output extends object> {
public abstract execute(input: Input): Output | void
}
class ChildClass extends BaseClass<{ content: string }, {}> {
public execute(input: {content: string }){
return true;
}
}
这段代码没有编译错误.然而,我可以让内容不是强制性的,Typescript 也会很高兴
class ChildClass extends BaseClass<{ content?: string }, {}> {
public execute(input: {content: string }){
return true;
}
}
我不知道这种行为是否正常.
真正奇怪的是,如果我向基类添加一个随机键,那么类型判断就会像我预期的那样工作:
abstract class BaseClass<Input extends object, Output extends object> {
// Adding any mandatory key here will do but not an empty object
public abstract execute(input: Input & { __trustMeImNecessary: true }): Output | void
}
class ChildClass extends BaseClass<{ content?: string }, {}> {
public execute(input: {content: string }){
return true;
}
}
现在我得到了
Type '{ content?: string | undefined; } & { __trustMeImNecessary: undefined; }' is not assignable to type '{ content: string; }'.
,如果我强制使用content
,那就没问题了.
这种行为正常吗?如果可以的话,我真的可以使用这个黑客吗?