在类型级别验证输入组合 - Angular

Verify combination of inputs at type level - Angular

提问人:Random Dev 提问时间:10/20/2023 最后编辑:Random Dev 更新时间:10/20/2023 访问量:23

问:

我有一个接受两个输入的角度组件;InputA 和 InputB。

  • InputA 只能具有以下值之一:A1、A2、A3。
  • InputB 只能具有以下值之一:B1、B2、B3、B4。

问题是,从业务角度来看,并非所有 InputA 值都可以与所有 InputB 值一起使用。 例如:

  • A1 只能与 B1 和 B4 一起使用。
  • A2 只能与 B1、B2 和 B3 一起使用。
  • A3 只能与 B1 一起使用。

如何执行类型级别检查,以确保使用我的组件的开发人员没有使用不存在的组合,例如示例 A1 和 B2。 当使用我的组件的开发人员编写如下内容时,我想在 IDE 中显示错误:<my-component inputA=A1 inputB=B1></my-component>

编写此类行不会引发类型级错误,因为 A1 是 InputA 的有效值,而 B2 是 InputB 的有效值。但这种组合并不好。

我已经实现了一个抛出运行时错误的方法,但在编译和执行之前,最好在 IDE 中出现错误。

Angular TypeScript 强制转换 类型错误

评论

0赞 Community 10/22/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

0赞 Sergey Barabanov 10/20/2023 #1

如果您需要简单的答案:

interface Case1 {
    value1: A1;
    value2: B1 | B4;
}

interface Case2 {
    value1: A2;
    value2: B1 | B2 | B3;
}

interface Case3 {
    value1: A3;
    value2: B1;
}

type InputType = Case1 | Case2 | Case3;

class Component {
    @Input() inputVar: InputType;
}

你可以将输入实现为“set:函数”,比如: @Input() 设置 inputB(value) {...} 并检查那里,但是如果您将使用 2 个输入 => mby,您将遇到同步问题(可以在 inputA 之前设置 inputB)。