小编Com*_*Cow的帖子

如何组合多个 TypeScript 类装饰器?

我有一个类装饰器家族,我在许多类中重复使用它们。类似的东西:

@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'.

有没有办法可以构造这个“包装器”装饰器来简化我的代码?

decorator typescript

7
推荐指数
1
解决办法
7101
查看次数

为什么DateTimeFormatInfo.GetAllDateTimePatterns在不同的.NET版本中返回不同的结果?

我在当前项目中做了一些全球化工作,我遇到了一个奇怪的行为.我在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后,我没有看到任何类似的东西.我想显示控制面板中显示的相同列表,所以当格式不同时我感到很惊讶.我认为格式列表将来自操作系统,并且在运行时版本之间没有区别.

c# globalization cultureinfo

3
推荐指数
1
解决办法
509
查看次数

标签 统计

c# ×1

cultureinfo ×1

decorator ×1

globalization ×1

typescript ×1