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

我希望能够通过向组件道具传递一些变量,从类似“类型映射”的内容中选择正确的类型。我将其称为“条件类型”,但在typescript文档的相应页面上没有找到解决方案

以下是一个简化的示例:

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
}