2017-09-25 11 views
0

関数テストで受け取っているinterfaceとtypeof引数を変更せずに、自分のtypescriptコンパイラを幸せにする方法を教えてください。機能テストでTypescriptキャスト

エラー: -

"Property 'method2' does not exist on type 'xyz'. Did you mean 'method1'?"

interface xyz { 
 
    method1(): string; 
 
} 
 

 
class abc implements xyz { 
 
    method1() { 
 
     return "abc"; 
 
    } 
 
    method2() { 
 
     return "new method"; 
 
    } 
 
} 
 

 
function test(arg: xyz) { 
 
    alert(arg.method2()); 
 
}

Link

+0

あなたはコンパイラが程度満足していないが何であるかを説明できますか? – evolutionxbox

+0

唯一のオプションは、インタフェースの一部として 'method2'を追加しています –

+0

あなたの問題は何ですか?コンパイラエラーとは何ですか?あなたは何を達成しようとしていますか? – k0pernikus

答えて

1

実際にあなたがすることはできません。

なぜですか?

コードをコンパイラに渡すには、xyzmethod2を追加するか、型パラメータを変更してabcを受け入れる必要があります。しかし、あなたはどちらも望んでいません。

あなたが他のフィールドにアクセスしたいときは、コンパイラで見られるタイプを変更するタイプのガードを使用することができます
1

:文書を通過した後

function isAbc(arg: xyz | abc): arg is abc { 
    return (<abc>arg).method2 !== undefined; 
} 

function test(arg: xyz) { 
    if (isAbc(arg)) { 
     // here the type of `arg` is `abc` 
     alert(arg.method2()); 
    } 
} 
関連する問題