我正在为我无法控制的 API 构建打字稿接口。该 API 基于 xml,并且需要按特定顺序排列属性。这些属性并非都是必需的,但如果存在,则它们必须按正确的顺序排列。例子:
数据库和查询是必需的,其他不是,但如果它们存在,则rowOffset必须出现在之前rowCount和rowCount之前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
Run Code Online (Sandbox Code Playgroud)
该请求的打字稿签名如下所示
sqlQuery(database: string, query: string, options: object) : Promise
Run Code Online (Sandbox Code Playgroud)
数据库和查询是必需的并且必须指定,其他选项转到一个对象,我们用所需的参数扩展它,并将整个内容转换为 xml 并按其方式发送。问题是选项将按顺序转换为 xml 属性,因此我需要强制属性的顺序,而不强制这些属性的存在。
我认为地图可以解决这个问题,但我不知道如何从地图创建自定义类型。我可以做一个界面
interface OptionalParams {
rowOffset? : string,
rowCount? : string,
formatValues? :string,
}
Run Code Online (Sandbox Code Playgroud)
但这不会强制执行它们相对于彼此存在的顺序。有没有这样的类型可以做到这一点?
小智 1
我在搜索同一件事时发现了这个问题。我不知道你是否仍然遇到这个问题,但我Map在 ES6 中了解到了这一点:https: //www.jstips.co/en/javascript/map-to-the-rescue-adding-order -到对象属性/
完整文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |