OData babel插件


本文介绍了在程序编译期间将TypeScript代码转换为OData查询的过程。


巴别塔-插件,插件ts2odata解析JavaScript的AST使用TsToOdata中,这在我以前的文章,介绍类型化的OData在打字稿查询


TsToOdata库的第一个版本的缺点是存在对程序包的依赖关系 巴别塔/解析器 巴别塔/遍历,在运行时解析JavaScript代码也非常昂贵。现在,这些依赖项和代码解析在单独的ts2odata-babel软件包中进行对于开发,您可以使用ts2odata软件包,该软件包对ts2odata-babel具有devDependencies并在运行时执行请求的翻译,对于发行版,您可以将程序集与插件一起使用,该插件将在项目编译期间完成所有工作。作为该插件的结果,您的程序将仅对ts2odata和cross-fetch包具有两个依赖项


首先,您需要安装软件包:


npm install --save-dev @babel/core @babel/cli
npm install ts2odata
npm install --save-dev babel-plugin-ts2odata

将babel.config.js文件添加到项目根目录:


module.exports = {
    plugins: [
        [
            'babel-plugin-ts2odata',
            {
                odataNamespace: 'OdataToEntity.Test.Model'
            }
        ]
    ]
};

如果您的OData服务不支持没有命名空间(Namespace)的枚举,则odataNamespace键对于正确转换请求是必需的。


scripts package.json:


"build": "tsc --build && npx babel ./source --out-dir ./lib"

source TypeScript, lib JavaScript .


TypeScript:


let price = 2.1;
let orders = context.Orders.filter(o => o.Items.every(i => i.Price >= price), { price })
    .select(i => { return { orderYear: i.Date.getFullYear() } }).toArrayAsync();

:


let price = 2.1;
let orders = context.Orders.filter("Items/all(d:d/Price ge {price})", {
  price
}).select("[{\"expression\":\"year(Date)\",\"alias\":\"orderYear\",\"kind\":1}]").toArrayAsync();

OData :


http://localhost:5000/Orders?$filter=Items/all(d:d/Price+ge+2.1)&$compute=year(Date)+as+orderYear

, code.js QueryTests.ts, output.js .
vue.js.


TypeScript, , , - .


All Articles