82%意志活字体(下)は、文献の知識を使用しました
エンジニアがスキルを学ばなければならなかったフロントエンドとして9021年、活字体(以下、TSと呼ばれる)を持って、私たちは、習得しなければなりません。
「パート文献の一般的知識の82%()の点を活字体であろう、」主にポイントタイプ、タイプアサーションインタフェースの基礎を引用し、基本的なタイプのTSを導入します。ジェネリック医薬品、クラス、関数:を含む議論の残りの内容、Benpian。
基礎は弱いTSのあなたが始めるために20分程度の論文を、読むことをお勧めします。
V.クラス
クラスは、ここでさらに理解するための論文で言及されています。
クラスの代表的な構成
これは、プロパティ、メソッド、コンストラクタが含まれています。クラスのキーワード新しいインスタンスが作成されて使用してください。
5.1クラスの継承
キーワードは、クラスの継承の定義を拡張して使用してください。
5.2クラス修飾子のメンバー
5.2.1公衆
クラス修飾子のデフォルトのメンバーが公開され、それはまた、明示的に宣言することができます。
上記のコードでは、aとbの属性は、パブリック宣言されています。
5.2.2プライベート
クラスのメンバは、クラス内でのみアクセス可能であること、プライベートと宣言しました。
TSは、システム構成タイプ(識別されたカナード形状)で、同一の構造の両方のタイプの場合、通常の状況下では、それらは互換性があるTSと考えられます。
しかし、プライベートまたはprotected修飾子を持つクラスのメンバーは、状況は同じではありません。
上記のコードでは、彼らが同じ構造を持っているようですが。必要性はそれと互換性がある場合は、クラスのプライベートまたは保護されたメンバーが別のクラスがあるとき、私たちは、継承を通じて、たとえば、同じ文からの2つのクラスを宣言する必要があります。
5.2.3保護
修飾されたその保護されたメンバーを除いて、保護された、専用同様改質剤は、派生クラスにアクセスすることができます。
5.2.4読み取り専用
読み取り専用にモディファイreadonly属性。
読み取り専用属性は、その値のみ定義され、変更することができない、初期化時に定義することができます。
5.2.5静的
クラスタイプでは、静的部分とクラスの一部の例を区別する。修飾子静的クラスのメンバは静的メンバとして宣言されました。
5.2.6抽象クラス
我们创建基类时,如果不希望基类能被实例化,可以使用 protected 修饰符。
更普遍的做法是,使用 abstract 修饰符。abstract 能定义抽象类和抽象类中的抽象方法。
5.2.7 getter 和 setter
很多时候,对某个属性读取时,同时需要对其进行处理,例如。
更加简单的办法是,通过 存储器 处理。
getter 和 setter 统称存取器,其实在 ES5 就已经存在,很多朋友没有留意。如果对存取器不熟悉的,也可以通过 TS 来理解。
六、函数
在 TS 中,有几种方式定义函数类型。
6.1 函数签名
利用上文提到的函数签名来定义函数类型。
6.2 完整的函数类型
除了使用函数签名外,还可以直接对函数进行类型描述。
但是,这种方式毫无疑问是太繁琐了,TS 存在类型推断的功能,它能根据等号一侧已存在的函数类型,而推断出另一侧的函数类型,从而简化代码。
6.3 类型推断
函数推断简化代码
6.4 可选参数
在 JS 中,参数都是可选的,如果函数声明了参数,但是实际没有传参,则参数值是 undefined。
默认情况下, TS 要求参数是必须的,函数声明了参数,就应该传进对应的参数。
但确实存在某个参数可能存在,可能不存在的情况。这时候就需要用到可选参数了。
值得注意的是,可选参数必须跟在必须参数之后。
6.5 默认参数
在 ES6 中,可以给参数设定默认值。
而在 TS 中,默认参数的特性也是和 ES6 一致,而默认参数的类型是:默认值和 undefined 的联合类型。
6.6 剩余参数
在 ES6 中,引入了剩余参数,代表由剩余所有参数组成的参数数组。
在 TS 中给剩余参数添加类型,和普通参数接近,区别在于剩余参数肯定是数组类型。
6.7 函数重载
函数根据传入不同的参数而返回不同的数据,这是十分普遍的情况。
如何对这种情况进行类型描述呢?有些朋友可能会想到使用联合类型进行处理。
但是,这样不能很好地描述输入和输出类型的关系。
在上述例子中,参数和返回存在对应关系:参数是 number 类型,则返回 boolean,参数是 boolean 类型,则返回 number,其他则返回 undefined。
此时,我们可以运用函数重载描述这些对应关系:
上述代码中,定义了三个 foo 函数的重载,需要注意两点。
- 具体的函数声明不属于重载部分,即 function foo(a: any): any 并不是重载,而是具体的函数声明,所以例子中只有三个函数重载;
- 当匹配重载列表时候,是根据定义时候的顺序由上到下匹配的。在例子中,传入参数是 undefined 时,首先尝试匹配 number,然后尝试匹配 boolean,最后尝试匹配 any,匹配成功则使用 any 这个重载定义。
7 泛型
泛型其实并不高深,借助几个已知概念可以帮助理解。
7.1 泛型函数
上文提到,当函数的参数和返回的类型存在联系时,我们使用了函数重载进行类型描述。
假如希望函数的参数和返回的值,它们之间的类型一致。如果使用函数重载,则需要:
这显得十分繁琐。而且,当传入的参数是数组或其他对象时,匹配的是函数重载的 object 部分,返回值的类型也是 object,丢失了原有的结构。
我们期望即使传入复杂的结构对象,也保留它们的类型描述。像上述代码中,传入是 number[] 类型的参数,期望返回的也是 number[] 类型描述,而不是 object 类型描述。
而使用泛型就能解决这个问题。以下借助变量的概念来对泛型进行解释。
变量我们都清楚,当变量被赋值成某值或对象时,该变量就代表着某值或对象。
而在类型系统中,通过引入类型变量,达到和变量相同的效果:当类型变量被赋值成某类型,则类型变量就代表该类型。
上述代码中,在函数名后添加 <T>, 代表在类型系统中声明了类型变量 T。所以,在对参数 a 和返回值进行类型描述时,我们可以使用 T 这个类型变量。
さらに、コードは固定されていない、Tは型変数を表す文字を使用して、文字A、有効な変数名等であってもよいです。しかし、規則、Tは、他の人が一目でコードを読み取るように、タイプ(種類)を表します。
それは変数があるので、私たちはどのように変数質量参加のこのタイプを行うには?
我々は明らかに角括弧は、特定の型の値を渡す使用して、関数を呼び出す際に、見ることができます。FOOの<数[]>([1、2、3)、例えば、アプリケーションの機能に対応する<番号[]>(:数[]):番号[]型チェック。このように、パラメータと戻り値は、明確なデータ構造を保持しています。
また、使用することも一般的な缶に、型推論、上記の。
上記のコードは、質量参加の明示的な型を省略したが、我々は、パラメータの種類に応じてTSを渡し、自動型Tを決定します
7.2ジェネリックインターフェイス
私たちはこのように、インターフェースは関数のシグネチャであることを知っています:
関数のシグネチャインターフェースの一般的な形式があります。
さらに、パラメータは、汎用のインタフェースパラメータとして使用することができます。
7.3ジェネリッククラス
ジェネリック宣言パラメータと同様ジェネリッククラスとジェネリックインターフェイスは、クラスで使用することができます。
エピローグ
これらは、あなたが最もTSコードのを読んで、使用することができ、キーTSについての知識、および2件の記事上下内容に精通しています。
TSは、多くのポイントを学び、週末の基本的な缶は今まで理解しています。
特定のTSハンドブックでは、この記事の内容のほとんどは、その仕上げに基づいており、TSに主に公式サイトを学び、我々はいくつかの助けを持って来ることを願って。