打字稿动态更改对象属性值错误

时间:2020-02-26 16:03:29

标签: javascript typescript object

我正在尝试根据属性类型动态更改对象属性值,例如,将所有对象字符串属性替换为“ ***”。我不断收到Type '"***"' is not assignable to type 'T[keyof T]'

我试图在Typescript GitHub存储库中找到正确的方法,但是没有运气。

在撰写此“ 3.8.2”时,我正在使用最新版本的Typescript。

有人知道动态访问属性时更改对象属性值的正确方法是什么吗?

示例:

interface IClassA {
    name: string;
    age: number;
}

const user: IClassA = {
    name: "Jhon Doe",
    age: 20
};

obfuscate(user);

export function obfuscate<T extends IClassA>(obj: T) {
    for (const prop of Reflect.ownKeys(obj) as (keyof T)[]) {
        if (typeof obj[prop] === "string") {
            obj[prop] = "***";
        }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

我不知道为什么要这样做,但是最简单的(肮脏的)黑客将您的文本投射给任何人:

if (typeof obj[prop] === "string") {
            obj[prop] = ("***" as any);
}