[英]Least abstract type in typescript
我经常使用以下结构:
const v = {
a: "string1",
b: "string2",
c: "string3"
}
const x: keyof typeof v = "a"
协助图书馆的用户并让编辑器显示可能的版本。
在上面,如果v
接收到显式类型{a: string, b: string, c: string}
,这将停止工作,因为typeof
解析为这个更通用的类型并且不再将单个键视为该类型的一部分。
但是,我希望能够在类型下键入v
并提取所述值的键。 这里的原因是 v 是一个大而复杂的 object 女巫几个化身。
有没有办法避免这种情况,以便我既可以键入 v 又可以提取具体 object 的密钥?
具体来说,我有以下类型的值
type T = {
a: {
[p: string]: string
}
b: {
[p: string]: string
}
}
价值:
const t: T = {
a: {
a1: "n1",
a2: "n2"
},
b: {
b1: "m1",
b2: "m2"
}
}
我的目标是制作一个带有签名const f: <TE extends T>(a: keyof TE["a"]) => boolean
的 function 来识别TE
和T
的最少抽象类型。 IE。
f("a3")
应该导致类型错误f("a2")
不应导致类型错误。我一直在寻找同样的东西。 我找到的唯一解决方案是使用工厂 function:
type T = {
a: {
[p: string]: string
}
b: {
[p: string]: string
}
}
function createT<TE extends T>(obj: TE): TE {
return obj;
}
const t = createT({
a: {
a1: "n",
a2: "n"
},
b: {
b1: "n",
b2: "n"
}
});
type TE = typeof t;
const f: (a: keyof TE["a"]) => boolean = () => true;
f('a1');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.