我建立了一个打字稿库项目。并使用公共包中的某些类。
假设一个简单的函数来测试它是否为BadRequestException
import { BadRequestException } from "@nestjs/common";
export function test(error) {
let a = error;
let b = BadRequestException;
console.log(a instanceof b);
}
从另一个普通项目构建并导入此shared-lib
库后
我这样打了
import { BadRequestException } from "@nestjs/common";
import { test } from 'shared-lib';
test(new BadRequestException('it is a test error'));
在我的视野中(应该是),测试功能中的a instance b
应该等于true
,但是我得到了false
库项目中使用的BadRequestException
是否不同于第二个项目中的"@nestjs/common"
,即使它们都是从ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
if (runningAppProcesses != null) {
int importance = runningAppProcesses.get(0).importance;
// higher importance has lower number (?)
if (importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
//start your service the same way you did before in here
startService(serviceIntent);
}
}
导入的?
在Github中上传了demo project
答案 0 :(得分:0)
好的,您不能将变量声明为类原型并使用instanceof,因为尚未实例化该变量。换句话说,b本质上是Object {}
。这项工作有效
export const test = error => error instanceof BadRequestException;
但是JS中的类很奇怪。从技术上讲,所有“类”都是对象Object {}
,因此据我所知,它们的“父”原型将是Object,而覆盖对象将是BadRequestException
。
如果您要怪异地处理类,最好使用prototypeof,但我不建议这样做
export const test = error => Reflect.getPrototypeOf(error) === BadRequestException;
答案 1 :(得分:0)
instanceof检查构造函数是否相同。关键是您的代码从库中的代码获取了自己的构造函数副本(因为那样做,这不是您的错),因此它们不再是同一实例。
尽管构造函数仍然共享相同的名称:
error.constructor.name === BadRequestException.prototype.constructor.name