JavaScriptの小さな友人のすべてのノウハウに精通し、typescriptですが、それにはJavaScriptが含まれている手段は、JavaScriptのスーパーセットです。私は限り、あなたは、あなたがより良い厳格な発展ので、それはtypescriptです使用することを学ぶ必要があり、より良い管理モジュールを持ちたいと考えるので、今日は、JavaScriptで活字体の変数を定義する方法を学ぶために行って、活字体の種類の変化に精通そして新しいタイプの活字体。
A.変数宣言
1.1形式の変数の宣言
私たちは、あなたが変数を定義活字体でタイプ識別子を指定する必要があり、何度も強調しています。
以下のように完全なステートメントの形式は次のとおりです。
VAR /聞かせて/ constの識別子:データタイプ=代入。
たとえば、私たちはメッセージを宣言し、以下の文言を完了します。
注:ここでの文字列が小文字で、差分文字列がある
文字列を活字体定義された文字列型で、文字列のECMAScriptで定義されたクラスであります
文字列= "Hello World" の;:メッセージを聞かせて
メッセージ=「こんにちは活字体」; //正しいことを行うには
、メッセージが文字列型であるため、//間違ったアプローチ;メッセージ= 20
1.2。キーワード宣言変数へ
活字体は、変数(識別子)およびES6の一貫性を定義した後に、使用済みのVAR、聞かせて、CONST定義することができます。
MYNAMEのVAR:文字列= "ABC";
のlet myAge:ナンバー= 20;
constのmyHeight:ナンバー= 1.88;
しかし、我々はVARを使用すると、警告をキーワードことを見出しました。
var关键字警告
varキーワード、およびアップグレードとES6の違いの主な理由を使用し、varが同じであるようにする提案していない活字体で見られ、varが何のブロックレベルのスコープではありません、多くの問題を引き起こすだろう、ここで探索を開始していません。
だから、現像後、我々は定義とのconst変数を聞かせて主に使用されています
1.3変数の型推論
開発では、時には便宜のために、我々はあなたがそれぞれの変数を宣言するときに対応するデータ型を記述する必要はありません、私たちは私たち自身が対応する変数型特性活字体を推測することができます願っています:
メッセージは=「Hello World」のみましょう。
:私たちは種類が指定されていませんでしたが、メッセージはまだ事実上、文字列型である上記のコード
image02
メッセージに番号を割り当てる
変数がある場合に最初の割り当ては、変数の型を推論するコンテンツバックの種類に応じて割り当てられることになるからです。
割り当ては文字列型が続いているため、上記のメッセージであるので、メッセージは明確な説明はないが、それでも文字列型であります
メッセージ= "Hello Worldのを"聞かせ; //文字列のタイプは
年齢= 20せ; //数タイプが
聞かせてisFlag =真; // boolean型
1.4。ステートメント名エラー
我々はtypescriptファイルに(また、他の多くの名)の名前を宣言すると、文句を言うでしょう:
image03を
ステートメント名、エラーメッセージ
、メインのエラーメッセージ:
できません再利用ブロック範囲変数「名」
私たちの前に明らかに名前を宣言していない(それは私が何をすべきかコントロールがあることは明らかだ)が、我々は声明を繰り返していることを言います
これは、グローバルな動作環境として、当社のtypescriptです意志のDOMのタイピングためであり、
私たちは名前を宣言し、DOM属性グローバル名は同じ名前で登場したときに、
image04
ステートメントの位置名
この問題を解決する方法?
2つのオプションがあります:DOMタイピング環境を削除して、宣言は、モジュール
モード1:DOMタイピング環境を削除します
我々はまだ私たちの活字体コードでDOMコンパイルされていることを願っていますので、しかし、このアプローチは、私たちのために適切ではありません
image05
削除DOMタイピング
第二の方法:モジュールのための私達のTSファイルを宣言
グローバル変数と同じ名前の登場以来、私たちは、モジュールが独自のスコープを持っているので、それはしませんし、グローバル紛争、スクリプトモジュール(モジュール)にパッケージ化されます。
活字体では、我々は、オブジェクトを導出する輸出ES6を使用することができ、そしてファイルがモジュールと考えられている
のlet名=「coderwhy」。
{}エクスポート;
1.5ためにconsole.log与え
さらに、テストを容易にするために、我々は、多くの場合、テストにはconsole.logを使用しますが、警告を使用するときに報告されます。
警告にconsole.log
今回、我々は設定でき
image06を
設定tslint
"NO-コンソール":偽
二つ。JavaScriptのデータ型
2.1。Number型
私たちは、デジタルタイプは、多くの場合、活字体とJavaScriptを使用タイプで開発している、のような、整数型(int型)および浮動小数点(ダブル)、統一番号の種類を区別しません。
// 1.数字类型基本定义
let num = 100;
num = 20;
num = 6.66;
如果你学习过ES6应该知道,ES6新增了二进制和八进制的表示方法,而TypeScript也是支持二进制、八进制、十六进制的表示:
// 2.其他进制表示
num = 100; // 十进制
num = 0b110; // 二进制
num = 0o555; // 八进制
num = 0xf23; // 十六进制
2.2. boolean类型
boolean类型只有两个取值:true和false,非常简单
// boolean类型的表示
let flag: boolean = true;
flag = false;
flag = 20 > 30;
2.3. string类型
string类型是字符串类型,可以使用单引号或者双引号表示:
注意:如果打开了TSLint,默认情况下推荐使用使用双引号
// string类型表示
let message: string = "Hello World";
message = 'Hello TypeScript';
同时也支持ES6的模板字符串来拼接变量和字符串:
const name = "why";
const age = 18;
const height = 1.88;
const info = my name is ${name}, age is ${age}, height is ${height}
;
console.log(info);
2.4. array类型
数组类型的定义也非常简单,有两种方式:
但是TSLint会推荐我们使用上面这种方式
const names1: string[] = ["why", "abc", "cba"];
const names2: Array<string> = ["why", "abc", "cba"];
2.5. object类型
object对象类型可以用于描述一个对象:
// object类型表示
const myinfo: object = {
name: "why",
age: 20,
height: 1.88,
};
但是上面的代码会报一个警告:
image07
object定义后警告
这是因为TSLint建议我们所有的key按照字母进行排序,但是这个并不是特别有必要,我们还是可以关闭掉:
image08
关闭TSLint字母排序
"object-literal-sort-keys": false
属性是不可以访问的
如果我们访问myinfo中的属性,会发现报错:
image09
找不到name属性
这是因为TypeScript并不知道某一个object类型上面就有一个name的属性。
但是如果我们让它是类型推断的,就可以正常的访问:
这是因为推导出来的类型,是如下的类型
image10
myinfo的类型
还有一种方法是定义后面会学到的接口,TypeScript一个非常好用的特性就是接口interface,后续我们会进行非常详细的学习
2.6. symbol类型
在ES5中,如果我们是不可以在对象中添加相同的属性名称的,比如下面的做法:
const person = {
identity: "程序员",
identity: "老师",
}
通常我们的做法是定义两个不同的属性名字:比如identity1和identity2。
但是我们也可以通过symbol来定义相同的名称,因为Symbol函数返回的是不同的值:
const s1 = Symbol("identity");
const s2 = Symbol("identity");
const person = {
};
这是Symbol的一个用法,更多其他用法大家可以自行学习,或者等到后续确实需要用到时,我们再详细讲解。
2.7. null和undefined
在 JavaScript 中,undefined 和 null 是两个基本数据类型。
在TypeScript中,它们各自的类型也是undefined和null,也就意味着它们既是实际的值,也是自己的类型:
const n: null = null;
const u: undefined = undefined;
三. TypeScript数据类型
TypeScript在原有的JavaScript基础上引入了很多好用的类型:enum枚举类型、tuple元组类型、any类型、void类型、never类型等”
3.1. enum类型
3.1.1. 枚举的基本定义
枚举类型在很多语言都有的类型,比如C++、Java等等,并且也非常好用,所以TypeScript引入了enum类型,让我们开发更好的方便和安全。
枚举类型通常是定义一组数据:
enum Direction {
EAST,
WEST,
NORTH,
SOUTH,
}
const d1 = Direction.EAST;
const d2 = Direction.NORTH;
3.1.2. 枚举类型的值
枚举类型有自己的值,比如打印上面的d1和d2
image11
打印d1和d2结果
默认情况下,枚举中的数据是从0开始的,我们可以改变它的初始化值,比如下面的代码:
enum Direction {
EAST = 10,
WEST,
NORTH,
SOUTH,
}
const d1 = Direction.EAST;
const d2 = Direction.NORTH;
console.log(d1); // 10
console.log(d2); // 12
也可以全部自己来指定:
enum Direction {
EAST = 10,
WEST = 20,
NORTH = 30,
SOUTH = 40,
}
const d1 = Direction.EAST;
const d2 = Direction.NORTH;
console.log(d1); // 10
console.log(d2); // 30
我们也可以通过对应的值去获取对应的数据名称:
console.log(Direction[10]); // EAST
console.log(Direction[30]); // NORTH
3.2. tuple类型
3.2.1. tuple的基本使用
tuple是元组类型,很多语言中也有这种数据类型,比如Python、Swift等。
const tInfo: [string, number, number] = ["why", 18, 1.88];
const item1 = tInfo[0]; // why, 并且知道类型是string类型
const item2 = tInfo[1]; // 18, 并且知道类型是number类型
3.2.1. tuple和数组类比
初学tuple会觉得它和数组非常相似
但是数组中通常会定义一组相同的数据,如果数据不同会造成类型的丢失:
注意:这里我使用了一种联合类型,后面会讲到
const aInfo: Array<string|number> = ["why", 18, 1.88];
const itema = aInfo[0]; // why,但是并不知道itema是string类型还是number类型
3.3. any类型
在某些情况下,我们确实无法确定一个变量的类型,并且可能它会发生一些变化,这个时候我们可以使用any类型(类似于Dart语言中的dynamic类型)
let a: any = "why";
a = 123;
a = true;
const aArray: any[] = ["why", 18, 1.88];
3.4. void类型
void类型通常用于函数没有返回值时来使用:
首先我们需要说明的是,在TypeScript中函数也是有类型的
下面的函数,虽然我们没有指定它的类型,但是它会通过类型推导出来:
const sum = (num1: number, num2: number) => {
return num1 + num2;
};
// 相当于下面的写法
const sum: (num1: number, num2: number) => number = (num1: number, num2: number) => {
return num1 + num2;
};
image12
sum函数的类型
如果一个函数没有返回值,那么它的返回值类型就是void
我们可以将null和undefined赋值给void类型,也就是函数可以返回null或者undefined
const sayHello: (name: string) => void = (name: string) => {
console.log("hello " + name);
};
3.5. never类型
never类型表示一种从来不会存在的值的类型,有点绕,我们来这样理解:
関数が無限ループの場合、関数は何かを返すのだろうか?いいえ、その後、不適切な戻り値の型としてvoid型または他のタイプを記述し、我々はタイプを使用することはありませんすることができます。
関数が例外をスローする場合は、値を返さないこの関数はそうではありませんか?今回はタイプを使用することはありませんすることができます。
image13
無限ループ機能
image14
スロー機能
注:公共の出発数フラッター、活字体のすべてのコンテンツ、反応して、ノード、 uniapp、 など小さなプログラムの開発、データ構造とアルゴリズム、またなど、自分自身の学習経験の一部を更新しますみんなの注目をお待ちしております。
きっとあなたはすでに変化の変数とデータ型の定義に関連するtypescriptです情報を知って、ここを参照してください、実際にはこれはtypescriptですにおける氷山の一角です。これはより多くの謎が我々の発見を待つがあります。私は、あなたはゆっくりと、それの謎を明らかにしますと。