可选上下文:
我正在编写一个工具,该工具会生成用于自动验证Typescript类型的代码,所以我想知道我生成的代码是否有效。
当前,我的工具输出以下代码:
const newVersion = (p0) =>
!!p0 &&
Object.prototype.hasOwnProperty.call(p0, "a") &&
!!p0["a"] &&
Object.prototype.hasOwnProperty.call(p0["a"], "b") &&
!!p0["a"]["b"] &&
Object.prototype.hasOwnProperty.call(p0["a"]["b"], "c") &&
typeof p0["a"]["b"]["c"] === "object" &&
p0["a"]["b"]["c"] !== null &&
!!p0["a"]["b"] &&
Object.prototype.hasOwnProperty.call(p0["a"]["b"], "d") &&
!!p0["a"]["b"]["d"] &&
Object.prototype.hasOwnProperty.call(p0["a"]["b"]["d"], "e") &&
typeof p0["a"]["b"]["d"]["e"] === "number";
以验证此Typescript类型
a: { b: { c: {}; d: { e: number } } };
实际问题:
[如果我有以下内容:p0["a"]["b"]["c"] === some_value
,几行后我要执行p0["a"]["b"]["c"]["d"] === another_value
,那么Javascript引擎(其中Javascript引擎= Chrome / Safari / Firefox中的内容)会记住我访问了[C0 ]并使用它来使第二次访问更快。
因为如果不是上述情况,那么我将更改代码生成以输出类似这样的内容(与上面的代码不完全相同,但是相似):
p0["a"]["b"]["c"]
作为旁注:括号访问和点式访问之间有速度差异吗?我知道这些东西通常无关紧要,但是我认为,由于我正在执行自动代码生成,因此不妨进行微优化。
只是一般建议:为什么不使用循环代替
const old = p12 => {
if (!Object.prototype.hasOwnProperty.call(p12, "a") || !(p18 => {
if (!Object.prototype.hasOwnProperty.call(p18, "b") || !(p21 => {
if (!Object.prototype.hasOwnProperty.call(p21, "c") || !(p22 => {
return true;
})(p21.c)) return false;
if (!Object.prototype.hasOwnProperty.call(p21, "d") || !(p23 => {
if (!Object.prototype.hasOwnProperty.call(p23, "e") || !(typeof p23.e === "number")) return false;
return true;
})(p21.d)) return false;
return true;
})(p18.b)) return false;
return true;
})(p12.a)) return false;
return true;
}