首页 > 解决方案 > 区分联合和重新定义属性类型

问题描述

我在 typescript 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 另外,由于某种原因,我可以使用财产。

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

操场

标签: typescriptunion-types

解决方案


推荐阅读