Typescript 仅强制对象属性的类型脚本
假设我有以下几点:Typescript 仅强制对象属性的类型脚本,typescript,Typescript,假设我有以下几点: constmyobj={foo:'cat',bar:'dog',baz:'bird'}作为const; 键入MyValue=‘鱼’|‘熊’|‘牛’; 常量myValueMap:记录={ [myObj.foo]:“鱼”, [myObj.bar]:“奶牛”, }作为常量; 由于myValueMap被声明为具有任意字符串键的对象,因此我们不会对对象的实际键进行类型检查(cat和dog)。我可以完全删除显式声明,但是我不强制要求值是MyValues。(在我的实际代码中,MyValu
constmyobj={foo:'cat',bar:'dog',baz:'bird'}作为const;
键入MyValue=‘鱼’|‘熊’|‘牛’;
常量myValueMap:记录={
[myObj.foo]:“鱼”,
[myObj.bar]:“奶牛”,
}作为常量;
由于myValueMap
被声明为具有任意字符串键的对象,因此我们不会对对象的实际键进行类型检查(cat
和dog
)。我可以完全删除显式声明,但是我不强制要求值是MyValue
s。(在我的实际代码中,MyValue
是几百个常量字符串。)
是否有一种方法(最好不使用包装器函数)强制执行值为MyValue
s,并且仍然保持属性类型检查
也许可以使用更多的泛型-
const myValueMap: Record<myObj[keyof myObj], MyValue> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
};
const myValueMap:记录={
[myObj.foo]:“鱼”,
[myObj.bar]:“奶牛”,
};
可能会使用更多的泛型-
const myValueMap: Record<myObj[keyof myObj], MyValue> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
};
const myValueMap:记录={
[myObj.foo]:“鱼”,
[myObj.bar]:“奶牛”,
};
如果我对您的理解正确,您就可以实现您的要求:
const myObj = { foo: 'cat', bar: 'dog', baz: 'bird' } as const;
type MyValue = 'fish' | 'bear' | 'cow';
const myObjValue = myObj["" as keyof typeof myObj];
const myMap: Partial<Record<typeof myObjValue, MyValue>> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
} as const;
constmyobj={foo:'cat',bar:'dog',baz:'bird'}作为const;
键入MyValue=‘鱼’|‘熊’|‘牛’;
常量myObjValue=myObj[“作为myObj类型的键];
常量myMap:Partial={
[myObj.foo]:“鱼”,
[myObj.bar]:“奶牛”,
}作为常量;
如果我对您的理解正确,您就可以实现您的要求:
const myObj = { foo: 'cat', bar: 'dog', baz: 'bird' } as const;
type MyValue = 'fish' | 'bear' | 'cow';
const myObjValue = myObj["" as keyof typeof myObj];
const myMap: Partial<Record<typeof myObjValue, MyValue>> = {
[myObj.foo]: 'fish',
[myObj.bar]: 'cow',
} as const;
constmyobj={foo:'cat',bar:'dog',baz:'bird'}作为const;
键入MyValue=‘鱼’|‘熊’|‘牛’;
常量myObjValue=myObj[“作为myObj类型的键];
常量myMap:Partial={
[myObj.foo]:“鱼”,
[myObj.bar]:“奶牛”,
}作为常量;
不幸的是,这会导致编译错误,因为myValueMap缺少键myObj.baz
。这基本上是我第一次尝试的。人力资源管理,如果有效,可能使用Partial
?同样的问题。将[keyof typeof myObj]
移动到部分
之外,可能会导致键未定义
。不幸的是,这会导致编译错误,因为myValueMap缺少键myObj.baz
。这基本上是我第一次尝试的。人力资源管理,如果有效,可能使用Partial
?同样的问题。将[keyof typeof myObj]
移动到部分
之外,可能会导致密钥未定义
。