2016-08-03 23 views
1

私はTypeScriptの学習の冒頭にいます。私は強く型付けされた言語(C#)から来て、JSでいくつかの知識を持っています。Typescriptのクラスとインターフェイス

はかなり冒頭で私は、次の例の上に落ちた:

class Student { 
    fullName: string; 
    constructor(public firstName, public middleInitial, public lastName) { 
     this.fullName = firstName + " " + middleInitial + " " + lastName; 
    } 
} 

interface Person { 
    firstName: string; 
    lastName: string; 
} 

function greeter(person : Person) { 
    return "Hello, " + person.firstName + " " + person.lastName; 
} 

var user = new Student("Jane", "M.", "User"); 

document.body.innerHTML = greeter(user); 

は今、私は少し混乱しています。 Student:Person(c#)またはStudent implements Person(Java) だから:greeter()が "Student"というオブジェクトを受け入れるのはなぜですか?私は "Student"が "Person"を実装しているという手掛かりは見ませんでした。

それはプロパティの名前についてですか?私は

class Teacher { 
    salaray:int, 
    firstName:string, 
    lastName:string 
} 

別のクラスを追加した場合 だから、そのクラスのオブジェクトは、greeter()のための有効なパラメータだろうか?

答えて

1

はい、あなたの前提に関する権利です。あなたは、コード化されたコードを見ることができます。 typescriptですが、これらのインタフェースおよびクラスのすべての知識が失われ、JavaScriptにtranspiledされたらあなたが投稿したコードは(私は、アラートへの最後の行を変更)この

var Student = (function() { 
    function Student(firstName, middleInitial, lastName) { 
     this.firstName = firstName; 
     this.middleInitial = middleInitial; 
     this.lastName = lastName; 
     this.fullName = firstName + " " + middleInitial + " " + lastName; 
    } 
    return Student; 
}()); 

function greeter(person) { 
    return "Hello, " + person.firstName + " " + person.lastName; 
} 

var user = new Student("Jane", "M.", "User"); 
alert(greeter(user)); 

のように見えます。あなたは上の蒸解された例からそれを見ることができます。この例では、入力変数personに実際にメソッドがアクセスしているプロパティがあるため、正しく実行されると考えられます。だから、Typescriptは、あなたのコードの蒸散されたバージョンが実際に意味をなさないことを知り、それについて不平を言わないでしょう。

1

はい、あなたは、コンパイラのチェックgreeter満たしPersonインタフェースに渡されたオブジェクトかどうかを正確だし、Studentクラスが必要なすべてのプロパティが含まれているので、コンパイラはそれについて満足しています。

そして、はい、あなたはこれを行うことができます:

class Teacher { 
    salaray: number; 
    firstName:string; 
    lastName:string; 
} 

document.body.innerHTML = greeter(new Teacher()); 

code in playground

+0

受け入れる答えは50/50の決定でした。それにもかかわらずThx。 :) –

関連する問題