class Book {
title: string;
datePublished: Date;
static unserialize(str) {
let ret = JSON.parse(str, (key, value) => {
switch (key) {
case 'datePublished': return new Date(value);
default:return value;
}
}) as Book;
return ret;
}
}
反序列化对象时,您可以像示例中那样在 JSON.parse 中使用 revive 函数。但是您正在通过常量字符串中的名称访问对象的属性,从而失去 typescript 的“控制权”(例如,重构更改 Prop 的名称不会反射(reflect)在开关案例中)。
有没有更好的方法来使用 typescript 的可能性?
最佳答案
不确定这是否是最佳解决方案,但我遇到了一种至少可以标记错误的方法。重构不会更改文字名称,但会在更改后标记为错误。
诀窍是将键的类型设置为 as keyof Book
class Book {
title: string;
datePublished: Date;
static unserialize(str) {
let ret = JSON.parse(str, (key: keyof Book, value) => { // "keyof Book" does the trick
switch (key) {
case 'datePublished': return new Date(value);
case 'xitle' : return value; // [ts] Type '"xitle"' is not comparable to type '"title" | "datePublished"
default:return value;
}
}) as Book;
return ret;
}
}
关于typescript - JSON 解析 typescript 验证 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532523/