在我正在处理的应用程序中,我不得不将AngularJS过滤器和指令翻译成TypeScript v2.4。
我找到了一个模式,我必须做的是让指令与AngularJS的$filter
服务一起使用 - 我需要使用$filter<\T>('???')(value)
重载来应用自定义电话格式化过滤指令。
这是翻译指令的链接功能:
link: (scope: any, elem: any, attrs: any, ctrl: angular.INgModelController) => {
const mask: string = '(999) 999-9999';
$(elem).mask(mask);
const nonDigitCharacers: RegExp = /[^0-9]/g;
elem.on('keydown', (evt: any) => {
scope.$evalAsync(elem.triggerHandler.bind(elem, 'change', evt));
});
ctrl.$validators.minLength = (modelValue: string, viewValue: string) => {
let minLength: number = 0;
if (attrs.minlength)
minLength = parseInt(attrs.minlength);
let stringValue: string = $filter<(input: string) => string>('tel')(modelValue);
let longEnough: boolean = stringValue.length > minLength;
// If value not required, and nothing is entered, the value is valid.
if (!attrs.required && stringValue.length === 0)
return true;
// If value is required, and nothing is entered, this value is 'valid'.
// The point of this code is to not interfere with a required attribute!
if (attrs.required && stringValue.length === 0)
return true;
return longEnough;
};
ctrl.$parsers.unshift((viewValue: string) => {
let digitsOnly: string = viewValue.replace(nonDigitCharacers, '');
return digitsOnly;
});
ctrl.$formatters.push((value: string) => {
return $filter<(input: string) => string>('tel')(value);
});
}
...我注意到的是,我必须在此$filter<(input: string) => string>('tel')(value)
两次,否则它将无法编译为JavaScript。然而,这似乎很浪费 - 我想要做的是创建C#开发人员可能认可的委托名称,或者其他语言可能称为类型别名,如下所示:
// It wouldn't be an interface, but I don't really know what it *would* be...
export interface IFilterFunctionType = (input: string) => string;
// Using it...
return $filter<IFilterFunctionType>('tel')('1234567890');
问题:如果有,我可以在TypeScript 2.4中创建函数类型的别名吗?
答案 0 :(得分:1)
TypeScript确实有type aliases!正如您所怀疑的那样,您不会将其声明为interface
。相反,您只需要将其声明为type
,使用与您使用的语法基本相同的语句(使用=
进行分配):
export type IFilterFunctionType = (input: string) => string;
return $filter<IFilterFunctionType>('tel')('1234567890');
如果您有时间,我建议您仔细阅读TypeScript Handbook,因为它包含您在使用TypeScript编程时可能会觉得有用的其他好东西。希望有所帮助。