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
は可能になります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント