如何使用其他方法扩展TextField类

时间:2019-03-18 15:26:23

标签: typescript nativescript

我想从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类(并且自动补全有效)?

2 个答案:

答案 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();
}