2016-07-12 15 views
0

私は、インターフェイスを実装するクラスまたはクラスを拡張するクラスを持つTypescriptの小さなコードの実装を持っています。Typescriptの継承IntelliSenseのデータ型は、予想される数値の代わりに任意の数値です

interface ITest { 
    run(id: number): void 
} 

abstract class Test implements ITest { 

    abstract run(id); 
} 

class TestExtension extends Test 
{ 
    constructor() { 
     super(); 
    } 

    public run(id) { } 
} 

class TestImplementation implements ITest { 
    constructor() { 

    } 

    public run(id) { } 
} 

両方が、私はタイプのよる「数」にIDを期待間違っインテリセンスを示しています。

(method) TestExtension.run(id: any): void 
(method) TestImplementation.run(id: any): void 

私は、もちろんsetメソッドの実装はpublic(id: number) { }ことにすることができますが、私が持っている理由私は表示されませんがこれを行う。

誰かが私を啓発できますか?

答えて

0

implements ITestのご理解はちょっと正しいです。 TypeScriptのインタフェースの実装は、他の言語のようなものではなく、クラスのメンバがインタフェースの定義と互換性がある必要があります。

だから、次のように正しいです:

let foo: number; 
let bar; // inferred any 
foo = bar; 

次は、関数の引数は

を修正し、明示的な署名せずに、任意のコード内でも正しい

interface IFoo { 
    foo: number 
} 
class Foo implements IFoo { 
    foo; // Inferred any 
} 

です

明示する:public run(id) { }public run(id: number) { }コンパイラでこれらのケースをキャッチする場合は、noImplicitAnyで任意にコンパイルしてください。

+0

私は見ていますが、実装がない抽象クラスと抽象メソッドがまだまだ不思議です拡張クラス? 私はTypescriptについて少し違って考える必要があります – Lostfields

関連する問題