記事ディレクトリ
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})