代码之家  ›  专栏  ›  技术社区  ›  MistyK

Typescript判别联合和重新定义属性类型

  •  0
  • MistyK  · 技术社区  · 3 年前

    我在打字稿3.9.7中遇到了以下问题。给定以下代码:

    type A = {
      type: string;
      cellRendererParams: any;
      filter: string;
    };
    
    type C = {
       type: 'yy';
       cellRendererParams: {
       test: any;
      };
    };
    
    
    type Combined = A | C;
    
    const u: Combined = {
      type: 'yy',
      cellRendererParams: { test: 'asd'}
    };
    

    我希望打字稿会抱怨 cellRendererParams 但事实并非如此。我认为这是因为它能够回落到 A 类型。我可以把类型改成

    type A = {
      type: string;
      cellRendererParams: never;
      filter: string;
    };
    

    它会起作用,但我仍然想给用户留下一个创建A并指定的选项 cellRendererParams 不幸的是,这永远无法阻止。此外,我能够使用 filter 出于某种原因的财产。

    有一个简单的解决方案吗?

    Playground

    0 回复  |  直到 3 年前