在打字稿界面中强制执行属性顺序

时间:2017-12-12 20:18:34

标签: typescript

我正在构建一个我无法控制的API的打字稿界面。 API是基于xml的,并且期望按特定顺序排列属性。这些属性并非都是必需的,但如果存在,则必须按正确顺序排列。例如:

enter image description here

数据库和查询是必需的,其他则不是,但如果它们存在rowOffset必须在rowCountrowCount之前formatValues

// Valid request
<database>my data</database>
<query>select * from some_table</query>
<formatValues>true</formatValues>

// Valid request
<database>my data</database>
<query>select * from some_table</query>
<rowOffset>1</rowOffset>
<formatValues>true</formatValues>

// Invalid request
<database>my data</database>
<query>select * from some_table</query>
<formatValues>true</formatValues>
<rowOffset>1</rowOffset> // formatValues must come after rowOffset if it exists

此请求的打字稿签名如下所示

sqlQuery(database: string, query: string, options: object) : Promise

数据库和查询是必需的,必须指定,其他选项转到一个对象,我们用我们需要的参数扩展它,并将整个事物转换为xml并在其路上发送。问题是选项将按顺序转换为xml属性,因此我需要强制执行属性的顺序,而不强制存在这些属性。

我认为地图可以解决问题,但我无法弄清楚如何从地图中制作自定义类型。我可以做一个界面

interface OptionalParams {
    rowOffset? : string,
    rowCount? : string,
    formatValues? :string,
}

但这不会强制它们相对于彼此存在的顺序。有没有这样的类型可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我在搜索同一东西时发现了这个问题。我不知道您是否仍然对此有疑问,但是由于以下原因,我在ES6中了解了Maphttps://www.jstips.co/en/javascript/map-to-the-rescue-adding-order-to-object-properties/

完整文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map