我有一个node.js应用程序使用Flow。为了摆脱Flow语法,我使用了babel:
{
"presets": ["env", "flow"],
"plugins": [
"transform-flow-strip-types"
]
}
它有效,但问题是使用" instanceof"运营商。我像这样扩展了标准错误构造函数:
/* @flow */
class BadRequestError extends Error {
constructor(message:string) {
super(message);
}
}
class InvalidRequestBodyError extends Error {
constructor(message:string) {
super(message);
}
}
class UnauthorizedError extends Error {
constructor(message:string) {
super(message);
}
}
class ExpiredResourceError extends Error {
constructor(message:string) {
super(message);
}
}
class InternalServerError extends Error {
constructor(message:string) {
super(message);
}
}
class ResourceNotFoundError extends Error {
constructor(message:string) {
super(message);
}
}
module.exports = {
BadRequestError,
InvalidRequestBodyError,
UnauthorizedError,
ExpiredResourceError,
InternalServerError,
ResourceNotFoundError
};
在Node.js中,它可以工作。但经过编译后,instanceof不再起作用了,因为类转换为了构造函数。
有没有办法阻止它?
使用babel-cli@6.26.0和node@8.9.0,这是我使用的命令行:
$ node_modules/.bin/babel ./src -d ./dist
答案 0 :(得分:1)
如Babel preset-env
documentation所述,
没有任何配置选项,babel-preset-env的行为与babel-preset-latest(或babel-preset-es2015,babel-preset-es2016和babel-preset-es2017)完全相同。
这就是为什么ES6类被转换为常规函数的原因。
此页面包含有关在节点中使用此预设的所有信息:
为方便起见,您可以使用“node”:“current”仅包含用于运行Babel的Node.js版本所需的polyfill和转换
应该是:
{
"presets": ["env", {
"targets": {
"node": "current"
}
}, "flow"],
"plugins": [
"transform-flow-strip-types"
]
}
答案 1 :(得分:0)
我通过
解决了这个问题更改类如下:
CREATE TABLE IF NOT EXISTS p1929_salesreport (id INTEGER PRIMARY KEY AUTO_INCREMENT,
company_id INTEGER,
company_code INTEGER,
value INTEGER);
INSERT INTO p1929_salesreport (company_id, company_code, value) VALUES (0, 67, 100);
INSERT INTO p1929_salesreport (company_id, company_code, value) VALUES (0, 55, 200);
CREATE TABLE IF NOT EXISTS p1929_company (id INTEGER PRIMARY KEY AUTO_INCREMENT,
company_code INTEGER,
name TEXT);
INSERT INTO p1929_company (company_code, name) VALUES (55, "XX");
INSERT INTO p1929_company (company_code, name) VALUES (67, "XA");
/* before changes */
SELECT * FROM p1929_company;
SELECT * FROM p1929_salesreport;
/* actual query */
UPDATE p1929_salesreport
LEFT JOIN p1929_company ON p1929_company.company_code = p1929_salesreport.company_code
SET p1929_salesreport.company_id = p1929_company.id;
/* after changes */
SELECT * FROM p1929_salesreport;
DROP TABLE p1929_salesreport;
DROP TABLE p1929_company;
请注意,按this后,它将在Babel 7中修复!