前提・実現したいこと
TypeScriptを使って開発を行っています。
Protractorが公開しているクラスElementFinderに対してメソッドを追加したいと考えています。
JavaScriptでいうと、以下のような感じです。
js:sample.js
1var ElementFinder = require( "protractor" ).ElementFinder; 2ElementFinder.prototype.additionalFunc = function() { 3 // do something 4}
試したこと
そこで、こちらのModule Augumentation
を参考に以下のようなコードを書いてみましたが、TSLintで怒られ、ビルドも通りません。
ts:sample.ts
1declare module 'protractor' { 2 interface ElementFinder { 3 additionalFunc(); 4 } 5} 6 7ElementFinder.prototype. additionalFunc = function() { 8 // do something 9};
発生している問題・エラーメッセージ
shell
1[ts] 'ElementFinder' only refers to a type, but is being used as a value here.
伺いたいこと
- このような記法はTypeScriptにはできないのでしょうか?
補足
バージョンはそれぞれ以下の通りです。
"ntypescript": "1.201609302242.1", "tslint": "5.4.2", "typescript": "2.3.4"
実際の解決方法
ベストアンサーとさせていただいた方法をもとに実際に対応した内容は以下の通りです。
本来ならば、ベストアンサーの回答に記載すべきところですが、MarkDown記法が利用できなかったため、こちらに記載させていただきます。
wrapper.ts
1(<any>ElementFinder).prototype.additionalFunc = function() { 2 // do something. 3} 4export class WrappedElementFinder extends ElementFinder { 5 additionalFunc() { 6 // どうせこれは呼ばれないので、適当に実装する 7 return <any>null; 8 } 9} 10export function elementWrapper(): WrappedElementFinder { 11 // protractor.elementというメソッドがElementFinderを生成して返す。 12 return <WrappedElementFinder>protractor.element(); 13}
test.ts
1import { elementWrapper } from wrapper.ts 2var finder = elementWrapper(); 3finder.additionalFunc(); // 「メソッドがない」と怒られない
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/05 03:05 編集