Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript装饰程序,获取值的类型_Typescript_Knockout.js - Fatal编程技术网

TypeScript装饰程序,获取值的类型

TypeScript装饰程序,获取值的类型,typescript,knockout.js,Typescript,Knockout.js,这是我的密码 function observableDecorator<T>(target: T, key: keyof T) { let observable = ko.observable<any>((target[key] as any)); Object.defineProperty(target, key, { get() { this[key]._ko_util_id = random;

这是我的密码

function observableDecorator<T>(target: T, key: keyof T) {
    let observable = ko.observable<any>((target[key] as any));

    Object.defineProperty(target, key, {
        get() {
            this[key]._ko_util_id = random;
            this.obs = observable<
                HERE_IS_WERE_THE_TYPE_OF_VALUE_SHOULD_BE
            >();
        },
        set(value) {
            observable(value);
        }
    });
}
在第6行,我需要值的类型。我试图从target[key]获取类型,但它未定义。我一定会喜欢并标出正确的答案。

我不确定这是否是你想要的,但它似乎可以满足你的需要

function observableDecorator<
    T extends Record<string, any>,
    K extends keyof T,
    V = T extends Record<string, infer X> ? X : never
>(target: T, key: K) {
    const observable = ko.observable<V>(target[key]);

    Object.defineProperty(target, key, {
        get() {
            this[key]._ko_util_id = random;
            this.obs = observable<V>(); // or typeof random?
        },
        set(value: V) {
            observable(value);
        }
    });
}

你为什么要在getter中设置一些东西?