chap.3 Interface
20233 ワード
インタフェースとは?
インタフェースとは、相互に定義された約束またはルールを指します.タイプスクリプトのインタフェースでは、通常、次のカテゴリの規則を定義できます.
使用方法
インタフェースはインターネットというキーワードで定義できます.
TVというインタフェースを作成します.このインタフェースはタイプを定義することができます.
tvは狙いとオフの機能がありますよね?
インタフェースとして表示する場合は、次のように表示できます.
interface TV {
turnOn();
turnOff();
}
次に、新しいmyTVを作成したとします.そのテレビにも電源を入れる機能と電源を切る機能があるので、上のテレビのインタフェースをそのまま持っていきます.
このようにmytvのタイプをTVに指定すると自動で完璧!サポートされているものを確認できます.
今もう一度見てください.
interface
ページを見ると、赤い線が次のように見えます.なぜなら、
turnOn()
、turnOff()
のデフォルトの戻りタイプが指定されていないからです.インタフェースで定義したアトリビュートを使用しない場合(上記のように)、問題はありません.逆に、オブジェクトにアトリビュートを追加しても問題はありません.
つまり,属性数が増えても構わないし,属性の順序を守らなくても構わない.
戻り値の設定
インタフェースで指定したメソッドの戻り値は、次のように指定できます.
interface TV {
turnOn(): boolean;
turnOff(): void; //반환값이 없다면 void입니다.
}
turnOnの戻り値はboolean値として指定されているため、mytvも戻り値をboolean値に設定する必要があります.const myTv: TV = {
turnOn() {
return true;
},
turnOff() {},
};
インタフェースでは、インプリメンテーションは独立しており、いくつかの動作を実行することのみを記述(定義)する.Javaのインタフェースみたいでしょ?なぜインタフェースを使うのですか?
インタフェースの利点は次のとおりです.
テレビを開く関数
tryTurnOn
を作成し、変数tvを追加したとします.function tryTurnOn(tv:TV){
}
でも、今はまだ関数を使う前なので、何かtvが入ってくるのか分からないでしょう?次に、列挙変数としてTVというインタフェースのtvを示す.自動補完はIDEで以下の方法でサポートできます.
タイプスクリプトのインタフェース
従来のOOPのインタフェース(javaなど)は上記のインタフェースを定義していますが、typescriptは以下のインタフェースを定義することもできます.
横行、列、馬の板があります.
interface Cell {
row: number;
col: number;
piece: Piece;
}
馬はPieceというインタフェースタイプで、Pieceインタフェースは馬の移動機能を定義しています.interface Cell {
row: number;
col: number;
piece: Piece;
}
interface Piece {
move(from: Cell, to: Cell): boolean;
}
これなら大体どんな機能なのか分かるでしょう.その上で、4 x 3形式のボードを作ります!
function createBoard() {
const cells: Cell[] = [];
for (let row = 0; row < 4; row++) {
for (let col = 0; col < 3; col++) {
cells.push({
row: row,
col: col,
//보드판에는 말이 없을 수도 있습니다.
});
}
}
return cells;
}
黒板の上で話をしないかもしれませんが、インタフェースの上で必ず1つ置くと言っています.オプション値は存在しない可能性があります。
この場合、
?
を使用してインタフェースを変更できます.interface Cell {
row: number;
col: number;
piece?: Piece;
}
?貼り付け後、属性を選択できます.readonly(読み取り専用)
readonlyを前にしてプロパティを定義すると、プロパティの最初の作成時に値を割り当てることができず、後で値を変更できます.
interface CraftBeer {
readonly brand: string;
}
読み取り専用スキーマ
アレイを宣言する場合は、ReadonlyArrayタイプを使用して読み取り専用アレイを作成できます.
let arr: ReadonlyArray<number> = [1,2,3];
arr.splice(0,1); // error
arr.push(4); // error
arr[0] = 100; // error
arr = [10, 20, 30]; // error
前述したように配列をReadonlyArrayと宣言した場合、配列の内容は変更できません.宣言時にのみ値を定義できることに注意してください.インタフェースはコンパイル時にJSに変換されて消滅するため,大量のインタフェースを記述してもコードが長すぎることはない.
強力なコードを書きましょう.
インタフェースの使用コストの例
interface SignUp {
email: string;
id: string;
password: string;
}
function signUpRequest(data:SignUp){
}
これでSignUpで必要なデータを記述し、会員加入申請時に受け取ったパラメータにタイプを指定して入れることができますよね?以下の自動補完機能はdomです!
+追加
関数のインタフェース
関数でパラメータのタイプと戻り値を定義する場合は、インタフェースも使用できます.
interface login {
(username: string, password: string): boolean;
}
下に使ってもいいですよね?let loginUser: login;
loginUser = function(id: string, pw: string) {
console.log('로그인 했습니다');
return true;
}
クラス内のインタフェース
Javaのようにタイプスクリプトでタイプルールを定義し、クラスが一定の条件を満たすことができます.
interface CraftBeer {
beerName: string;
nameBeer(beer: string): void;
}
class myBeer implements CraftBeer {
beerName: string = 'Baby Guinness';
nameBeer(b: string) {
this.beerName = b;
}
constructor() {}
}
拡張インタフェース
クラスと同様に、インタフェースも拡張されます.
interface Person {
name: string;
}
interface Developer extends Person {
skill: string;
}
let frontEnd = {} as Developer;
この場合frontEndはnameとskillの属性を同時に持つのではないでしょうか.ブレンドタイプ
JavaScriptの柔軟でダイナミックなタイププロパティに基づいて、さまざまなタイプのコンビネーションインタフェースを作成することもできます.たとえば、オブジェクトタイプを定義できますが、関数タイプです.
interface CraftBeer {
(beer: string): string;
brand: string;
brew(): void;
}
function myBeer(): CraftBeer {
let my = (function(beer: string) {}) as CraftBeer;
my.brand = 'Beer Kitchen';
my.brew = function() {};
return my;
}
その他のセクションは、インタフェース|タイプスクリプトマニュアルを参照してください.Reference
この問題について(chap.3 Interface), 我々は、より多くの情報をここで見つけました https://velog.io/@yhg0337/chap.3-Interfaceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol