定义嵌套对象的类型-TS

时间:2020-06-10 14:23:47

标签: typescript types

我有一个URL对象。通过按一个按钮来请求URL。我有3个按钮:输入输出 StandardReport

StandardReport 将打开一个窗口,其中包含3个按钮,分别名为 Define Validate Refresh 。< / p>

export interface StandardReport {
    define: string;
    validate: string;
    refresh: string;
}


interface GeneratedFilesURL {
  inputs: string;
  outputs: string;
  standardReport: StandardReport;
}

export const GENERATED_FILES_URL: GeneratedFilesURL = {
  inputs: '/generated_files/input_consolidation',
  outputs: '/generated_files/output_consolidation',
  standardReport: {
    define: '/generated_files/standard_report_define',
    validate: '/generated_files/standard_report_validate',
    refresh: '/generated_files/standard_report_refresh',
  },
};

export type Source = 'inputs' | 'outputs' | StandardReport;

我使用GENERATED_FILES_URL[source]访问URL,其中source可以是输入输出,我得到Type 'StandardReport' cannot be used as an index type.并也{ {1}}或GENERATED_FILES_URL.standardReport.define

您能帮我提供确切的类型结构吗?

Playground link

请导航到错误标签以获取错误

1 个答案:

答案 0 :(得分:1)

对于您的Source类型,您实际上想拥有类似export type Source = keyof GeneratedFilesURL的东西;

并且对于您的界面(因为您要按字符串查找),最简单的方法是从Record扩展它

interface GeneratedFilesURL extends Record<sting, any> {
    ....
}

那么您就可以轻松地做自己想做的事

export const myType: Source = 'standardReport';
const bla = GENERATED_FILES_URL[myType].define
相关问题