我想从unfocus()
向TextField
类添加新的'tns-core-modules/ui/text-field'
方法。
当前,我发现了如何实现将其投射为any
类型的方法:
app.ts
中的
import { TextField } from 'tns-core-modules/ui/text-field';
(<any>TextField.prototype).unfocus = function () {
this.dismissSoftInput();
if (this.android) {
this.android.clearFocus();
}
};
some-page.ts
中的
export function onMainGridLayoutTap(args: EventData) {
const mainGridLayout = <GridLayout>args.object;
const emailTextField: TextField = mainGridLayout.getViewById("emailTextField");
(<any>emailTextField).unfocus();
}
可以,但是看起来很丑。
如何使用其他方法扩展TextField类(并且自动补全有效)?
答案 0 :(得分:1)
最简单的解决方案是扩展并使用您自己的:
import { TextField } from 'tns-core-modules/ui/text-field';
export class Custom extends TextField {
unfocus(){
//
}
}
扩展对于类是很自然的。变异不是很多。
答案 1 :(得分:1)
您还可以使用模块扩展,在其中扩展外部模块中的类型:
import { TextField } from 'tns-core-modules/ui/text-field';
declare module 'tns-core-modules/ui/text-field' {
export interface TextField {
unfocus(): void;
}
}
TextField.prototype.unfocus = function (this: TextField) {
this.dismissSoftInput();
if (this.android) {
this.android.clearFocus();
}
};
export function onMainGridLayoutTap(args: EventData) {
const mainGridLayout = <GridLayout>args.object;
const emailTextField: TextField = mainGridLayout.getViewById("emailTextField");
emailTextField.unfocus();
}