gpt4 book ai didi

javascript - 更易读的方式来编写复杂的 If 语句

转载 作者:行者123 更新时间:2023-11-30 15:18:18 26 4
gpt4 key购买 nike

我正在为我的 Angular 项目编写用户定义的类型保护。

以下 if 语句(由我的注释标记)工作得非常好 — 但我忍不住认为会有一种更易读的方式来编写它们。

下面首先检查传递给函数的 Object 是否具有所需的 Prop (如果没有则提前退出)。

下一个(也是第三个)if 语句检查 prop activity 的值是一个字符串。

第二个和第四个 if 语句需要检查属性 createdAtupdatedAt 的值是 String 类型,还是它们是对象,它们有自己的 Prop .sv,其值是字符串 timestamp

import { GridMetadata } from './grid-metadata';

export function isGridMetadata(obj: any): obj is GridMetadata {
[ 'activity', 'createdAt', 'totalReps', 'updatedAt' ].every((prop) => {
if (obj.hasOwnProperty(prop) === false) return false;
});

if (typeof obj.activity !== 'string') return false;

// TODO: Better way to write this?
if (typeof obj.createdAt === 'string') {}
else if (obj.createdAt.hasOwnProperty('.sv') && obj.createdAt['.sv'] === 'timestamp') {}
else return false;

if (typeof obj.totalReps !== 'number') return false;

// TODO: Better way to write this?
if (typeof obj.updatedAt === 'string') {}
else if (obj.updatedAt.hasOwnProperty('.sv') && obj.updatedAt['.sv'] === 'timestamp') {}
else return false;

return true;
}

可能确实有更好、更易读的方式来编写整个函数?!

最佳答案

首先,每个值都没有存储在任何地方。您可以直接退回支票:

var objHasPropertiesInTheList = [ 'activity', 'createdAt', 'totalReps', 'updatedAt' ].every((prop) => {
return obj.hasOwnProperty(prop);
});

现在 objHasPropertiesInTheList 如果对象中不存在列表的所有这些属性,则为 false。所以在这里添加检查,如果没有所有的属性,就做你需要的。

然后这个:

if (typeof obj.createdAt === 'string') {}
else if (obj.createdAt.hasOwnProperty('.sv') && obj.createdAt['.sv'] === 'timestamp') {}
else return false;

可以很简单:

if (typeof(obj.createdAt) !== 'string' && obj.createdAt['.sv'] !== 'timestamp') {
return false;
}

和最后一个一样:

if (typeof(obj.updatedAt ) !== 'string' && obj.updatedAt['.sv'] !== 'timestamp') {
return false;
}

关于javascript - 更易读的方式来编写复杂的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com