Q:優れたJavaScriptの欠点はありませんか?
持ってる!たとえば、es5のvar宣言変数スコープの問題、およびコードが実行されるまで構文が間違っているかどうか。。
Q:JavaScriptは活況を呈していますか?
正しい!Esがいくつあるかがわかります。JavaScriptが徐々に良くなっていることは否定できません。基礎となる設計からであれ、アプリケーションレベルからであれ、ES6、7、8などの導入により、言語はより多くなり、毎回より重要です。最新で、より安全で、より便利ですが、JavaScriptはまだ型チェックにはほど遠いことがわかります。。ネチズンはそれが絵のようだと言います
ブログ投稿では、最もシンプルでわかりやすい用語を使って、定義された変数などの複雑なポイントを説明します。人々に理解してもらうために、好きなように変更できます。私はそれをaabbと呼びます。 xiaohongなど 。。
TypeScriptを知る
官ر解释:TypeScriptはJavaScriptの型付きスーパーセットであり、プレーンJavaScriptにコンパイルされます。
TypeScriptは、JavaScript ES6、ES7、ES8、およびその他の新しい構文標準の拡張バージョンとして理解できます。これらはすべて
サポートされています。最初の割り当て変数でタイプが指定されていない場合、tsはコンパイル段階でエラーを報告するかどうかを確認します。 、多くのタイプを自動的に推測
します。多くの人がtsを使用してプロジェクトを完了できず、多くの人がtsを任意のタイプとして使用し始めたため、会社がtsを使用したくないというわけではありません
。統合タイプ配列内の配列は配列と呼ばれ、不均一型はタプルと呼ばれます。tsに触れたことがない場合は、理解していなくても、見下ろしていても、理解していなくても構いません。最後に、私を殴ってください!
TypeScriptの使用を開始するには、公式ドキュメントを5分間確認することをお勧めします・TypeScript中国語のWebサイト・TypeScript-JavaScriptのスーパーセット
Tsをダウンロード
- TypeScriptは最終的にJavaScriptにコンパイルされて実行されるため、対応する環境を構築する必要があります。
# 安装命令
npm install typescript -g
# 查看版本
tsc --version
TypeScriptを記述した後は、ブラウザーで直接実行できます。TypeScriptを記述した後は、ブラウザーで直接実行できるため、ts-nodeを使用する必要があります。
- さらに、ts-nodeはtslibと@ types/nodeの2つのパッケージに依存する必要があります。
npm install ts-node -g
npm install tslib @types/node -g
これで、ts-nodeを介してTypeScriptコードを直接実行できます。
ts-node xxx.ts
tsを使用する
JavaScriptタイプ
タイプ文字列を定義する
let message: string = 'Hello 活在风浪里。。'
- 違いは何ですか?tsの場合、型は厳密であり、型は変数宣言の前に指定されます。
- tsは、コンパイル段階でエラーを報告するかどうかを確認するプロンプトを表示します
- 型を指定せずに初めて変数を割り当てると、自動的に型推論が行われます。たとえば、10と書くと、それは型番号で、今は文字列です。これは、書いたものが文字列であるためです。
- 注:ここでの文字列は小文字であり、Stringとは異なり
ます。StringはTypeScriptで定義された文字列型であり、StringはECMAScriptで定義されたクラスです。 - メッセージに文字列以外の値を割り当てると、エラーが報告されます
タイプ番号を定義する
最初に、es6、es7をサポートすると言いました... ES6は2進数と8進数の表現を追加し、TypeScriptは2進数、8進数、16進数の表現もサポートしています。
let num1: number = 100 // 十进制
let num2: number = 0b100 // 二级制
let num3: number = 0o100 // 八进制
let num4: number = 0x100 // 十六进制
console.log(num1, num2, num3, num4) // 100 4 64 256
タイプ配列を定義する
最初に一般的に使用される
const uname: string[] = [] ;
2番目のreactjsxに競合があります
const uname: Array<string> = []
ブール型を定義する
let flag: boolean = true
タイプシンボルを定義する
ES5では、次のように、オブジェクトに同じプロパティ名を追加できない場合
const userinfo = {
uname: 'holle',
uname: 'holle' // 报错 不可以在对象里定义相同属性
}
したがって、es6シンボルを使用できます
const uname= Symbol('uname')
const uname= Symbol('uname')
const info = {
[uname]: 'tom',
[uname]: 'tom'// 两个tom是不一样的
}
Es6は、jsの7番目の言語である一意の値を表す新しいプリミティブデータ型シンボルを参照します。シンボルの値は一意であり、変数の問題を解決するために使用されます。値は他のデータで操作できません。シンボルSは大文字にする必要があり、シンボル値を使用して値を直接渡すことは異なります。関数オブジェクトsymbol.forを使用して作成された番号は、同じステータスコードです。
2つの同じ値を直接渡し、シンボル番号を使用するのは異なります
let s1 = Symbol('Zhang San');
let s2 = Symbol('Zhang San');
console.log(s1 ==== s2); // falseは等しくありませんが、すべてZhang Sanにサービスを提供していますが、メモリ番号は異なります
nullおよびundefinedタイプを定義します
const aa: null = null
const bb: undefined = undefined
TypeScripteタイプ(5タイプ)
タイプを定義する
- 場合によっては、変数のタイプを実際に判別できないことがあり、変数が変更される可能性があります。現時点では、任意のタイプを使用できます。
// 在不想给某些 变量 添加具体的数据类型时可以用any
let message: any = 'Hello World'
message = 123
message = true
message = {}
console.log(message)
タイプ不明を定義
- unknownはTypeScriptの特殊なタイプであり、不確実なタイプの変数を記述するために使用されます
function str() {
return 'abc'
}
function num() {
return 123
}
// unknow 类型只能复制给 any 和 unknow 类型
// any 类型可以赋值给任意类型 !!
const flag = true
let result: unknown
if (flag) {
result = str()
} else {
result = num()
}
console.log(result)
タイプvoidを定義します
- voidは通常、関数に戻り値がないことを指定するために使用され、その戻り値はvoidタイプです。
function sum(num1: number, num2: number): void {
console.log(num1 + num2)//没有返回值,直接打印
}
sum(20, 30)
タイプを定義しない
- 関数が無限ループであるか例外をスローする場合、戻り値型としてvoid型または他の型を記述することは適切ではなく、never型を使用できます。値が発生しないタイプを表すことはありません
function bar(): never {
throw new Error()
}
タイプタプルを定義する
- 通常、同じタイプの要素を配列に格納することをお勧めします。異なるタイプの要素を配列に配置することはお勧めしません。(オブジェクトまたはタプルに配置できます)対応する値は、インデックスに従って取得できます。
const info: [string, number, number] = ['why', 18, 1.88]
const name = info[0]
const age= info[1]
データの種類
オブジェクトタイプとインターフェイスは、オブジェクトの形状を指定できます
//对象类型
function obj (num: { x: number; y: number }) {
console.log(num.x)
console.log(num.y)
}
// num('123') //报错
// num({ x: '123', y: '123' }) // 报错
obj({ x: 123, y: 321 })//类型传入正确
インターフェース
interface InfoType {
name: string
age: number
}
const obj: InfoType = {
name: 'tom',
age: 18
}
オプションタイプ
//对象类型
function obj (num: { x: number; y?: number }) {// y 非必传
console.log(num.x)
console.log(num.y)
}
obj({ x: 123, y: 321 })//类型传入正确
obj({ x: 354})// 正确
共用体タイプ
function obj ( v : number | string) {
if (typeof v === 'string') {
console.log(v) // abc
} else {
console.log(v) // 123
}
}
obj(123)
obj('abc')// 传这两种类型都可以,联合类型就是将多种类型用 管道符 串联
タイプアサーション
- 冒頭で述べたように、タイプがデフォルトで指定されていない場合、タイプは自動的にアサートされます
更新しています。。。
2022/3/2