相关疑难解决方法(0)

Typescript 接口可以表达属性的共现约束吗

在整体 Typescript 接口或类型定义中是否有标准模式来断言属性要么一起出现要么根本不出现?

例如,一个项目可能是有效的,如果它看起来像这样......

{
  id:"ljklkj",
  spellcheck:true,
  spellcheckModel:"byzantine",
}
Run Code Online (Sandbox Code Playgroud)

...或这个...

{
  id:"ljklkj",
}
Run Code Online (Sandbox Code Playgroud)

但是,如果任何一个拼写检查属性单独发生,则它是无效的。

{
  id:"ljklkj",
  spellcheckModel:"byzantine",
}
Run Code Online (Sandbox Code Playgroud)
{
  id:"ljklkj",
  spellcheck:true,
}
Run Code Online (Sandbox Code Playgroud)

整体式

当然,上面的简单情况可以通过创建一个 Data 和一个 SpellcheckData 类型或接口来解决。然而,在我的应用案例中,将有多个共现属性的“集群”。为每个共现组合定义一个新类型会导致类型爆炸,以表达这种情况。

出于这个原因,我将该解决方案称为“整体式”接口。当然,可能需要使用某种形式的组合来定义它。

我试过的

我试图在 Typescript 语言参考中找到这样的例子,但不知道该功能可能被称为什么(或者实际上,如果它是一个可以表达的功能),我很挣扎。属性可以是单独可选的,但我看不到表达共现的方式。

相关技术

此处讨论了 XML 数据验证的等效功能... https://www.w3.org/wiki/Co-occurrence_constraints

对于 JSON,我理解像 Schematron 和 Json Content Rules 这样的模式语言能够表达共同约束。

工作实例

如果我想像应用于 Solr 搜索引擎的 HTTP 参数集的共同约束情况的打字稿语法,它可能看起来像这样,表明您可以选择完全满足拼写或组参数,或者根本不-一个联合,其中每个类型都是可选的(由?表示)......

type SolrPassthru =
  SolrCoreParams & (
    SolrSpellParams? |
    SolrGroupParams?  
  )
Run Code Online (Sandbox Code Playgroud)

这与下面的示例形成对比,我认为这是正确的 Typescript,但需要每组参数中的所有参数。

type SolrCoreParams = {
  defType: SolrDefType,
  boost: SolrBoostType,
}

type SolrSpellParams = {
  spellcheck: …
Run Code Online (Sandbox Code Playgroud)

constraints typescript

9
推荐指数
1
解决办法
126
查看次数

标签 统计

constraints ×1

typescript ×1