我有一个类装饰器家族,我在许多类中重复使用它们。类似的东西:
@foo
@bar
@baz
export class MyClass { /* ..... */ }
Run Code Online (Sandbox Code Playgroud)
由于我在多个类中使用这三个装饰器,我真的很想将其分解为一个装饰器,如下所示:
@standard
export class MyClass { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
我试图创建一个新的类装饰器,它像这样链接装饰器调用:
export function standard<ReturnType>(ctor: Constructor<ReturnType>) {
return baz(bar(foo(ctor)));
}
Run Code Online (Sandbox Code Playgroud)
TypeScript 手册说应用多个装饰器应该评估类似于函数组合,这就是为什么我认为我应该能够将它们链接在一起。但是,到了编译时间(使用 TypeScript 1.8)我得到一个类似于
Unable to resolve signature of class decorator when called as an expression. Type 'Constructor<ReturnType>' is not assignable to type 'void'.
有没有办法可以构造这个“包装器”装饰器来简化我的代码?
我在当前项目中做了一些全球化工作,我遇到了一个奇怪的行为.我在Windows 7上运行,只安装了英语 - 美国,我的应用程序在.NET 3.5上运行.
给出以下代码段:
var culture = new CultureInfo("zh-CN", true);
var formats = culture.GetAllDateTimePatterns('D');
Run Code Online (Sandbox Code Playgroud)
在.NET 4下,返回以下格式:
yyyy'?'M'?'d'?'
yyyy'?'M'?'d'?',dddd
dddd,yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
这是控制面板中的日期和时间格式对话框显示的内容(我的目标).
但是在.NET 3.5(及更早版本)中,返回以下内容:
yyyy'?'M'?'d'?'
yyyy-MM-dd
dddd, yyyy-MM-dd
dddd, yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
我去检查了使用EnumDateFormatsExEx(和早期版本)返回了什么值,它与.NET 4的结果相匹配.
差异不会打扰我; 我的问题是为什么结果不同?我认为底层实现是在呼唤EnumDateFormatsExEx或类似,但在我解雇了Ilspy后,我没有看到任何类似的东西.我想显示控制面板中显示的相同列表,所以当格式不同时我感到很惊讶.我认为格式列表将来自操作系统,并且在运行时版本之间没有区别.