- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 following code on typescript playground出现了一些我不确定如何开始工作的问题
class PathInfo {
functionName: string;
httpPath: string;
httpMethod: string;
constructor(functionName: string, httpPath: string, httpMethod: string) {
this.functionName = functionName;
this.httpPath = httpPath;
this.httpMethod = httpMethod;
}
toString(): string {
return "PathInfo["+this.functionName+","+this.httpPath+","+this.httpMethod+"]";
}
}
class AuthRequest {}
class AuthResponse {}
class LoginRequest {}
class LoginResponse {}
const path: any = (thePath: string, type: any) => {
return (target: Function, memberName: string, propertyDescriptor: PropertyDescriptor) => {
const pathMeta = new PathInfo(memberName, path, type);
Object.defineProperty(target, memberName+'pathInfo', {
value: pathMeta,
writable: false
});
//How do I access the stored pathMeta
//console.log("target="+target.pathInfo);
console.log("member="+memberName);
console.log("props="+propertyDescriptor);
}
}
class AuthApiImpl {
@path("/authenticate", AuthResponse)
authenticate(request: AuthRequest): Promise<AuthResponse> {
throw new Error("all this is generated by factory.createApiImpl");
}
@path("/login", LoginResponse)
login(request: LoginRequest): Promise<LoginResponse> {
throw new Error("all this is generated by factory.createApiImpl");
}
};
function printMethods(obj: any) {
console.log("starting to print methods");
for (var id in obj) {
console.log("id="+id);
try {
//How do I access the stored pathMeta here FOR EACH METHOD ->
//console.log("target="+target.pathInfo);
if (typeof(obj[id]) == "function") {
console.log(id+":"+obj[id].toString());
}
} catch (err) {
console.log(id + ": inaccessible"+err);
}
}
}
console.log("starting to run")
const temp = new AuthApiImpl();
printMethods(temp);
console.log("done")
非常抱歉,因为我试图专注于一个问题,但是在我深入 typescript 世界的过程中,这个编写装饰器的测试给了我更多的问题而不是答案。
如何调整代码以在此处播放更多内容?
这里的目标是当开发人员定义其他微服务的 API 时,我可以捕获一堆元信息并将其存储在某个地方,以便稍后在启动代码中使用。我不关心我真正存储它的位置,但只需要一种清晰的方式来了解我想要扩展的类、方法、返回类型、http 路径等。
最佳答案
即使你去掉装饰器,你仍然无法获取方法名。这不是特定于 TypeScript 的问题。
您需要获取原型(prototype)的属性,而不仅仅是对象本身。
function printMethods(obj: any) {
console.log("starting to print methods");
const objProto = Object.getPrototypeOf(obj);
console.log(Object.getOwnPropertyNames(objProto));
}
目前不认为装饰器可以做到这一点,但将类名作为字符串传递应该很简单。
类似问题:TypeScript class decorator get class name
在 GitHub 上打开问题:https://github.com/microsoft/TypeScript/issues/1579
请注意,如果您运行上面的代码,您会在 console.log
中得到以下内容:
["constructor", "authenticate", "login", "authenticatepathInfo", "loginpathInfo"]
我还想指出,如果您甚至不初始化该类的实例,您仍然会遇到同样的错误。
关于node.js - 使用 Object.defineProperty 后如何读取 typescript 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71371216/
我正在寻找这两种方法之间的主要区别。 一些网站提到了可读性问题,但我的担忧主要是与性能相关。看起来像defineProperty()更快,但我找不到原因。 var FOR_TIME = 10000;
我正在做一个 JavaScript 项目,只是想知道为什么对象实例不继承 defineProperty() 和其他方法,而不必调用父类(super class)(superobject?) 对象方法。
在 React 配置中使用 eslint 在使用 Object.defineProperty 时出现错误。错误说: Avoid using Object.defineProperty, instead
Object.defineProperty函数会直接在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象。 一、简单使用 const obj = {} Object.defineP
我使用React、Webpack、Babel构建项目,希望它在IE8中运行,存在IE8不支持Object.defineProperty的问题。 我没有使用这个功能,但是 npm 包可以做到这一点,比如
我想构建一个检测对象更改的代理: 定义了新属性。 现有属性已更改。 代码示例 1 - defineProperty const me = { name: "Matt" } const proxy
下面我尝试使用defineProperties函数定义对象的属性,但是当我打印此脚本中的最后一行时,我得到了意外的结果。我希望在控制台上记录 2005 年,但我不断收到 2004 年。这同样适用于其他
假设在我的模块中我有这样的东西: Object.defineProperty(Array.prototype, 'sayHello', {get: functio
我最近为 node.js 创建了自己的模块,用于 koa 模块。它是一个类似 koa-i18n 的翻译模块。我研究了其他 koa 模块以了解函数/属性如何应用于 koa 上下文/请求,其中一些使用 O
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 6 年前。 在我的代码中我有一个
我正在尝试使用 defineProperty 使属性不出现在 for...in 循环中,但它不起作用。这个代码正确吗? function Item() { this.enumerable =
我正在尝试从 ABAP 执行 JS 代码,但出现以下错误: Object.defineProperty is not a function. 我的代码: Object.defineProperty(o
所以我一直在我的主要 javascript 启动文件中使用一堆这些,我需要其中的 20-30 个。有没有办法可以从不同的文件中导出这些文件,以便清理我的主文件? Reflect.definePrope
询问 Object.defineProperty 如下所示: function testComponent(){ var testProperty; Object.defineProp
我最近重组了我的 Three.js 项目,我开始遇到一个问题,每个对象似乎都是用完全相同的几何形状和 Material 渲染的。我在调试器中跟踪了这个构造函数的问题: function Geometr
var funcSetter = { defineProperty: function(target, prop, descriptor) { if (prop) {
我是 js 世界的新手,发现 jquery 将许多属性声明为方法,这让我非常不舒服。例如 $("#foo").parent() 我认为应该是属性。 我知道js也可以定义属性,所以我想尝试将这些方法重新
前言: Feel free to skip to the actual question below, if you find the'backstory' here unnecessary. But
我正在尝试创建自己的类对象并使用它来存储应用程序的各种数据类型,这在使用已发布属性时一切正常,我可以将它们流式传输到磁盘并毫无问题地返回。但我还需要流式传输一些动态整数类型数组。
我试图覆盖我应用程序中所有 iframe 的 src 属性,因此无论 HTML 的值是什么,它们的 src 属性总是设置为“redirect.html”标签为其定义。到目前为止,我提出了以下建议,但它
我是一名优秀的程序员,十分优秀!