TypeScript インターフェース

インターフェースは一連の抽象メソッドの宣言であり、メソッド特性の集合です。これらのメソッドはすべて抽象である必要があり、具体的なクラスによって実装される必要があります。そしてサードパーティはこの一連の抽象メソッドを通じて呼び出し、具体的なクラスに具体的なメソッドを実行させることができます。

TypeScript インターフェースの定義は次のとおりです:

interface interface_name { 
}

例

次の例では、インターフェース IPerson を定義し、次に変数 customer を定義しています。その型は IPerson です。

customer はインターフェース IPerson のプロパティとメソッドを実装しています。

TypeScript

interface IPerson { firstName:string, lastName:string, sayHi: ()=>string } var customer:IPerson = { firstName:"Tom", lastName:"Hanks", sayHi: ():string =>{return "Hi there"} } console.log("Customer オブジェクト") console.log(customer.firstName) console.log(customer.lastName) console.log(customer.sayHi()) var employee:IPerson = { firstName:"Jim", lastName:"Blakes", sayHi: ():string =>{return "Hello!!!"} } console.log("Employee オブジェクト") console.log(employee.firstName) console.log(employee.lastName)

インターフェースは JavaScript に変換できないことに注意してください。それは TypeScript の一部にすぎません。

上記のコードをコンパイルすると、次の JavaScript コードが得られます:

JavaScript

var customer = { firstName: "Tom", lastName: "Hanks", sayHi: function () { return "Hi there"; } }; console.log("Customer オブジェクト"); console.log(customer.firstName); console.log(customer.lastName); console.log(customer.sayHi()); var employee = { firstName: "Jim", lastName: "Blakes", sayHi: function () { return "Hello!!!"; } }; console.log("Employee オブジェクト"); console.log(employee.firstName); console.log(employee.lastName);

出力結果は次のとおりです:

Customer 对象
Tom
Hanks
Hi there
Employee  对象
Jim
Blakes

ユニオン型とインターフェース

次の例では、インターフェースでユニオン型を使用する方法を示します:

TypeScript

interface RunOptions { program:string; commandline:string[]|string|(()=>string); } //commandline は文字列です var options:RunOptions = {program:"test1",commandline:"Hello"}; console.log(options.commandline) //commandline は文字列配列です options = {program:"test1",commandline:["Hello","World"]}; console.log(options.commandline[0]); console.log(options.commandline[1]); //commandline は関数式です options = {program:"test1",commandline:()=>{return "**Hello World**";}}; var fn:any = options.commandline; console.log(fn());

上記のコードをコンパイルすると、次の JavaScript コードが得られます:

JavaScript

//commandline は文字列です var options = { program: "test1", commandline: "Hello" }; console.log(options.commandline); //commandline は文字列配列です options = { program: "test1", commandline: ["Hello", "World"] }; console.log(options.commandline[0]); console.log(options.commandline[1]); //commandline は関数式です options = { program: "test1", commandline: function () { return "**Hello World**"; } }; var fn = options.commandline; console.log(fn());

出力結果は次のとおりです:

Hello
Hello
World
**Hello World**

インターフェースと配列

インターフェースでは、配列のインデックス値と要素を異なる型に設定できます。インデックス値は数値または文字列にできます。

要素を文字列型に設定します:

例

interface namelist { [index:number]:string } //型が一致しているため、正しいです var list2:namelist = ["Google","サンプル","Taobao"] //エラー: 要素 1 は string 型ではありません // var list2:namelist = ["サンプル",1,"Taobao"]

他の型を使用するとエラーになります:

例

interface namelist { [index:number]:string } //型が一致しているため、正しいです // var list2:namelist = ["Google","サンプル","Taobao"] //エラー: 要素 1 は string 型ではありません var list2:namelist = ["John",1,"Bran"]
実行後のエラーは次のとおりで、型が一致しないと表示されます:
test.ts:8:30 - error TS2322: Type 'number' is not assignable to type 'string'.

8 var list2:namelist = ["John",1,"Bran"]
                               ~

  test.ts:2:4
    2    [index:number]:string
         ~~~~~~~~~~~~~~~~~~~~~
    The expected type comes from this index signature.


Found 1 error.

TypeScript

interface ages { [index:string]:number } var agelist:ages; //型は正しいです agelist["サンプル"] = 15 //型エラー、出力 error TS2322: Type '"google"' is not assignable to type 'number'. // agelist[2] = "google"

インターフェースの継承

インターフェースの継承とは、インターフェースが他のインターフェースを通じて自分自身を拡張できるということです。

TypeScript はインターフェースが複数のインターフェースを継承することを許可します。

継承にはキーワードを使用しますextends。

単一インターフェース継承の構文形式:

Child_interface_name extends super_interface_name

複数インターフェース継承の構文形式:

Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name

継承する各インターフェースはカンマで,区切ります。

単一継承の例

TypeScript

interface Person { age:number } interface Musician extends Person { instrument:string } var drummer = <Musician>{}; drummer.age = 27 drummer.instrument = "Drums" console.log("年齢:"+drummer.age) console.log("好きな楽器:"+drummer.instrument)

上記のコードをコンパイルすると、次の JavaScript コードが得られます:

JavaScript

var drummer = {}; drummer.age = 27; drummer.instrument = "Drums"; console.log("年齢:" + drummer.age); console.log("好きな楽器:" + drummer.instrument);

出力結果は次のとおりです:

年龄:  27
喜欢的乐器:  Drums

多重継承の例

TypeScript

interface IParent1 { v1:number } interface IParent2 { v2:number } interface Child extends IParent1, IParent2 { } var Iobj:Child = { v1:12, v2:23} console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)

上記のコードをコンパイルすると、次の JavaScript コードが得られます:

JavaScript

var Iobj = { v1: 12, v2: 23 }; console.log("value 1: " + Iobj.v1 + " value 2: " + Iobj.v2);

出力結果は次のとおりです:

value 1: 12 value 2: 23
その他の拡張