注意:此问题扩展了Property decorator only for a specific property type
-
我的目标是设计一个简单的ORM,其中可以这样定义一个模型:
@model.model()
class User extends model.Model {
@model.attr(model.StringType)
user: string;
@model.attr(model.StringType)
age: number;
}
在此模型中,我希望编译器抛出类型错误,因为StringType
无法应用于类型number
的属性。但是,我无法使其正常工作-不会引发任何错误。
到目前为止,我的代码:
interface Constructor<T> {
new (...args: any[]): T;
}
abstract class BaseType<T> {}
class StringType extends BaseType<string> {}
type RecordKey = string | symbol;
export function attr<T>(type: Constructor<BaseType<T>>) {
return <K extends RecordKey, C extends Record<K, T>>(ctor: C, key: K) => {
console.log(ctor, key);
}
}
一些有关此代码如何工作的指针在这里将非常有用。