允许类 Typescript 类型中的任意属性

2023-12-14

我在 Typescript 中创建了一个泛型类,以从构造函数中传递的对象开始扩展对象(通过代理,该代理将在构造函数中返回)。

class MyClass<T> {
    private _a: 5;
    constructor(source: T) {
        ...
        return new Proxy(Object.assign(this, source), { ... });
    }
}

如果我想举例MyClass, 我会去做的:

interface DeepObject {
    a: number,
    b: {
         c: number,
         d: { ... }
    }
}

const x = new MyClass<DeepObject>({
    a: 1,
    b: {
        c: 2,
        d: { ... }
    }
});

因此,结果,我将得到 x 作为一个具有内部“DeepObject”属性的类,例如a, b, b.d。但如果我尝试访问x.b.d,它显然不会识别新属性,因为它们是在运行时以当前状态推入的。 有没有办法使用 MyClass 的T参数作为类返回类型,知道我正在返回编辑后的“this”(MyClass + new props)? 我试图将它设置为构造函数,但打字稿不允许我,就像

    constructor(source: T): ThisType<MyClass<T>> & T { ... }
    constructor(source: T): MyClass<T> & T { ... }

此外,使用//@ts-ignore多行(例如

//@ts-ignore
x.b.c = 5;
//@ts-ignore
x.b.d.f = 9;

),是对打字稿功能的误用,恕我直言。

同样是放[key: string]: any在类内部、属性之上或之下。

非常感谢!


您不能直接计算构造函数的返回类型。但是,您可以使用与以下相同的方法Proxyusses 并为构造函数有一个单独的声明,该构造函数在返回中使用泛型类型参数

class _MyClass<T> {
    private _a: 5;
    constructor(source: T) {

        return new Proxy(Object.assign(this, source), { ... });
    }
}

interface DeepObject {
    a: number,
    b: {
        c: number,
        d: {  }
    }
}
const MyClass : {
    new<T> (s:T) : _MyClass<T> & T
} = _MyClass as any
const x = new MyClass<DeepObject>({
    a: 1,
    b: {
        c: 2,
        d: {  }
    }
});

x.b.c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许类 Typescript 类型中的任意属性 的相关文章

随机推荐