TypeScriptの深い理解-インターフェース

1、限定された属性

オブジェクトの資格

この入力には、文字列型のname属性のみが含まれている必要があります。そうでない場合、エラーが報告されます。

/*对象限制*/
function sayName1(obj: {
     
      name: string }) {
    
    
	console.log("我的名字叫:" + obj.name);
}
sayName1({
    
    name: "张三"})

効果:

我的名字叫:张三

インターフェイスの制限

機能は上記と同じです。

interface People {
    
    
	name: string
}
function sayName2(obj: People) {
    
    
	console.log("我的名字叫:" + obj.name);
}
sayName2({
    
    name: "李四"})

効果:

我的名字叫:李四

いくつかのスペル

オプション
なし。

タイプとして、コードヒントがあります。

interface People {
    
    
	name: string
	age?:number
}

読み取り専用
これは、プロパティの一般的な資格です

interface People {
    
    
	readonly id:number
	name: string
	age?:number
}

3、その他に限定

関数型

関数の戻りを制限できます。

パラメータ名は必須ではありませんが、タイプは一貫している必要があります。

interface sayName {
    
    
	(obj: {
    
     name: string }): void
}
let a: sayName
a = function (s: {
     
      name: string }): void {
    
    
	console.log(s.name)
}

配列型

配列の値型は修飾できます。

interface MyStringArray {
    
    
	[index: number]: string;
}

let myArray: MyStringArray;
myArray = ["AAA", "BBB"];

let myStr: string = myArray[0];

4、限定クラス

使いやすい

クラスはインターフェイスを実装し、そのすべてのプロパティとメソッドを持っている必要があります。

interface User {
    
    
	name:string
	sayName():void
}
class MyUser implements User {
    
    
	name:string;
	sayName() {
    
    
		console.log(this.name)
	}
}
let a=new MyUser()
a.name="( ⊙ o ⊙ )啊!"
a.sayName()

継承関係

インターフェイスは複数のインターフェイスから継承できます。制限が重ね合わされます。

インターフェイスはクラスから継承することもできます。

5、コンパイラをだます(非推奨)

このオブジェクトはこのインターフェースに属し、チェックする必要がないことをコンパイラーに通知します。

タイプアサーション

アサーションの後、コンパイラはそれをチェックしません。

interface People {
    
    
	name: string
}
function sayName2(obj: People) {
    
    
	console.log(1)
}
sayName2({
    
    } as People)

属性の資格

属性要件を緩和すると、コンパイラーはエラーを報告しません。

interface People {
    
    
	name?: string
	[propName: string]: any
}
function sayName2(obj: People) {
    
    
	console.log(1)
}
sayName2({
    
    age:3})

おすすめ

転載: blog.csdn.net/qq_37284843/article/details/123768071