low*_*ost 5 javascript class typeof decorator typescript
bar是一个简单的类装饰器,它将属性添加到类Foo中.
function bar(target) {
target.inDecorator = 'in decorator';
}
@bar
class Foo {
inClass:string;
inDecorator:string;
constructor() {
this.inClass = 'a string';
}
getInClass() {
return this.inClass;
}
}
console.log(Foo.inDecorator);
console.log(Foo.prototype.inDecorator);
const foo = new Foo();
console.log(foo.getInClass());
console.log(foo.inDecorator);
Run Code Online (Sandbox Code Playgroud)
导致错误的唯一控制台日志是第一个,Foo.inDecorator,包含在ts 1.5.3中的内容
Property 'inDecorator' does not exist on type 'typeof Foo'.
Run Code Online (Sandbox Code Playgroud)
据我所知,inDerator应该在Class Foo的原型上定义,并且应该在Foo上可用,就像它是静态道具一样.运行生成的js文件显示原型访问以及新foo对象的未定义,但是Foo.inDecorator即使它是错误的来源也能正确打印.更清楚的是,我们得到了
in decorator
undefined
a string
undefined
Run Code Online (Sandbox Code Playgroud)
关于如何正确输入/添加静态道具或方法的任何想法?
谢谢!
编辑这个,因为我最初忽略了原型访问,Foo.prototype.inDecorator无法正常工作的事实.
装饰器内target指的是函数\xe2\x80\x94 Foo\xe2\x80\x94 而不是原型\xe2\x80\x94 Foo.prototype。
所以在装饰器中所做的事情与和 nottarget.inDecorator = ...相同。Foo.inDecorator = ...Foo.prototype.inDecorator = ...
这是一种方法:
\n\ninterface BarStatic {\n new(): BarInstance;\n inDecorator: string;\n}\n\ninterface BarInstance {\n inDecorator: string;\n}\n\nfunction bar(target: BarStatic) {\n target.inDecorator = 'static';\n // note that prototype will be `any` here though\n target.prototype.inDecorator = 'instance';\n}\n\n@bar\nclass Foo {\n static inDecorator: string; // required\n inDecorator: string; // required\n inClass: string;\n\n constructor() {\n this.inClass = 'a string';\n }\n\n getInClass() {\n return this.inClass;\n }\n}\n\nconsole.log(Foo.inDecorator); // static\nconsole.log(Foo.prototype.inDecorator); // instance\nconst foo = new Foo();\nconsole.log(foo.getInClass()); // a string\nconsole.log(foo.inDecorator); // instance\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |