Typescript 基于变量的条件类型
我希望能够通过向组件道具传递一些变量,从类似“类型映射”的内容中选择正确的类型。我将其称为“条件类型”,但在typescript文档的相应页面上没有找到解决方案 以下是一个简化的示例:Typescript 基于变量的条件类型,typescript,typescript2.0,Typescript,Typescript2.0,我希望能够通过向组件道具传递一些变量,从类似“类型映射”的内容中选择正确的类型。我将其称为“条件类型”,但在typescript文档的相应页面上没有找到解决方案 以下是一个简化的示例: type Queue1 = {}; type Queue2 = {}; type Queue3 = {}; // ... another possible type type QueueTypes = { 'Queue1': Queue1, 'Queue2': Queue2, 'Queu
type Queue1 = {};
type Queue2 = {};
type Queue3 = {};
// ... another possible type
type QueueTypes = {
'Queue1': Queue1,
'Queue2': Queue2,
'Queue2': Queue3
// ...
}
interface Props {
queueType: keyof QueueTypes;
}
let props: Props = {queue: 'Queue2'}
// Type 'any' cannot be used as an index type
type rightQueueType = QueueType[props.queue]
在谷歌搜索了一个小时后,我从未找到正确的解决方案。
也许我用错了打字脚本?
我很乐意得到任何帮助
链接到
Upd:
我有一个可重用的通用react组件(表),可以处理不同类型的资源(Queue1、Queue2等)。我无法显式提供资源类型,因为它是动态的。因此,我所拥有的只是一个作为字符串的资源类型,我需要以某种方式将其转换/强制转换为现有的typescript类型。
根据我最初的游乐场,它可能看起来像这样:
/>(反应组分)
我最终采用了这种方法(感谢@jcalz):
接口队列1{q:1}
接口队列2{q:2}
接口队列3{q:3}
类型队列类型={
“队列1”:队列1,
“Queue2”:Queue2,
“队列3”:队列3
}
type Props={[K in keyof QueueTypes]:{queueType:K}}[keyof QueueTypes]
让props:props={queueType:'Queue2'}
//
您可以使用记录是一种对象类型,其属性键为K,属性值为T。也就是说,记录的键等于K,记录[K]等于T
type QueueTypes: Record<string, Queue1 | Queue2 | Queue3> = {
'Queue1': Queue1,
'Queue2': Queue2,
'Queue2': Queue3
}
类型队列类型:记录={
“队列1”:队列1,
“Queue2”:Queue2,
“队列2”:队列3
}
没有名为props的类型
,因此没有名为QueueType[props.queue]的类型
。我想你可能想要,但我不确定你能解释一下你想用rightQueueType
做什么吗?我不想把上面的游乐场链接写出来作为答案,结果却发现您的用例与之不匹配。@jcalz我有一个可重用的通用react组件(表),可以处理不同类型的资源(Queue1、Queue2等)。我无法显式提供资源类型,因为它是动态的。所以我只有一个字符串形式的“资源类型”,我需要以某种方式将其转换/强制转换为TypeScript类型。根据我最初的想法,它可能是这样的:
(React component)@jcalz看起来你的答案帮助了我。我不确定这是唯一正确的方法,但它的工作方式是我想要的。谢谢
type QueueTypes: Record<string, Queue1 | Queue2 | Queue3> = {
'Queue1': Queue1,
'Queue2': Queue2,
'Queue2': Queue3
}