我想知道我们将参数传递给函数的方式是否意味着什么。假设我有一个函数负责检查是否基于其内部名称对象引入了用户。
interface User {
id: number;
name: {
first: string;
last: string;
}
}
哪种功能使用最好?
否。 1
function isUserIntroduced(user: User): boolean {
return user.name.first && user.name.last;
}
我们在这里传递整个用户对象,但我们只需要它的内部名称数据,因此看起来更糟糕的解决方案,因为其他数据(想象用户比上面的接口大得多)不需要。
否。 2
function isUserIntroduced(name: UserName): boolean {
return name.first && name.last;
}
UserName是用户界面中名称对象的接口(只是为了缩短它)。现在我们只传递我们需要的数据,对吗?但是在我们称之为此功能的每个地方,呼叫都会自行this.isUserIntroduced(user.name)
而不是this.isUserIntroduced(user)
。问题是函数的名称现在是否适合其目的。那么它会检查用户是否被引入但事实上它只是在名称周围运行。所以它的最佳名称应该是“isTheNameValid”或其他东西。
否。 3
function isUserIntroduced({name}: User): boolean {
return name.first && name.last;
}
这在我看来是最好的。调用此函数的速度与No.1相同,但在函数内部,我们只能访问我们需要的数据。不幸的是,在编译之后,第3号代码看起来像这样:
function x(_a) {
var name = _a.name;
return name.first && name.last;
}
事实上,即使我们无法访问其余数据,它仍然存在于内存中。