TypeScriptの色々な互換性について

TypeScriptの色々な互換性について

TypeScriptはinterfaceがあったり、そのinterfaceをimplementsできたりよく見るとJavaにかなり似ています。

少し違う点もあるので、色々互換性とか調べてみました。

interfaceとclassが同じプロパティであれば以下のようなことができます。

interface Aaa{
  num:number;
}

class Sample{
  num:number = 0;
}
let a:Aaa= new Sample();// こんな宣言ができる
console.log(a.num);

これはJavaだとエラーになりますが、TypeScriptだとokayです。

プロパティ数が一致していない場合はどうなるかというと、以下のとおりokayです。

interface Aaa{
  num:number;
}

class Sample{
  num:number = 0;
  name:string = 'takahashi';
}

let a:Aaa= new Sample();// こんな宣言ができる
console.log(a.num);
// console.log(a.name);// ただしnameプロパティはないのでこれはNG

気をつけないといけないのは、interfaceにnameプロパティが存在して、classにnameプロパティが存在しない場合はコンパイルエラーとなります。

関数の互換性について

関数を定義して、その互換性を調べてみます。

let x = (a: number) => 0;
let y = (b: number, s: string) => 1;
let ret:number;

y = x; // okay

ret = x(3);
console.log(ret);// 結果は0と表示される
ret = y(5,'');
console.log(ret);// 結果は0と表示される

//x = y;// これはコンパイルエラー

yにはプロパティが2つあるので、xに代入することはできません。

xにはnumber型のプロパティがあり、yにもnumber型のプロパティがあるので、y=xは可能になります。

TypeScriptの色々な互換性について

コメント

タイトルとURLをコピーしました