Я пытаюсь, чтобы мой декоратор, прикрепленный к свойству, отображал список элементов на typeof MyObject
при вызове как @MyProperty(MyObject, { /* public properties that are in MyObject */ })
Я пытался использовать export function MyProperty<T extends Behavior>(component: typeof T, options?: Options<T>) {
, но это дает мне ошибка:
'T' относится только к типу, но здесь используется в качестве значения.
Я также пытался использовать InstanceType<T>
следующим образом: export function MyProperty<T extends Behavior>(component: InstanceType<T>, options?: Options<T>) {
но это дает мне такую ошибку:
Тип 'T' не удовлетворяет ограничению 'new (... args: any) => any'.
Я также пытался использовать typeof Behavior
вместо typeof T
, однако это дает элементы в Behavior
, а не в классе, расширяющем Behavior
.
Я не совсем уверен, как это сделать. Как я могу получить эти свойства во втором параметре @MyProperty
?
export type Options<T> = {
[P in keyof T]?: T[P]
}
export function MyProperty<T extends Behavior>(component: typeof T, options?: Options<T>) {
return (target: MyTarget, property: string): void => {
}
}
export class Item extends MyTarget {
@MyProperty(Mesh, {color: 'red'})
public mesh!: Mesh
}
export class Mesh extends Behavior {
public mesh!: ThreeMesh
public geometry!: Geometry
public color: string | number | Color = 0xffffff
}