[効果型スクリプト]-1週目
15277 ワード
私たちはNekaraku杯の前端第2期の同僚と前端研究を行うことにしました.今週から機能型スクリプト研究を行い、整理した内容をネット上にアップロードします.
Github組織アドレス:https://github.com/FEonTheBlock
レポートアドレス:https://github.com/FEonTheBlock/Effective-TypeScript
第1章
[プロジェクト1]タイプスクリプトとJavaScriptの関係を理解する
文法の有効性と動作の焦点は独立した問題である.
つまり、文法が正しくなくても、動作が全くできないわけではありません.
タイプスクリプトは、タイプ推定によってタイプを理解し、タイプインスペクタは問題を検索します.(推定文字列、推定toUpperCaseメソッド)(小文字→大文字)
タイプスクリプトタイプシステムはJavaScriptのランタイム動作を「モデリング」しますが、タイプフィルタによって予期せぬ例外コードも検出されます.
作成したプログラムがタイプチェックに合格しても、実行時にエラーが発生する可能性があります.
エラーの根本的な原因は、タイプスクリプトが理解する値と実際の値に違いがあることです.(値のタイプを理解する:nameの文字列vs実際の値:undefined)
[プロジェクト2]タイプスクリプトの設定について
タイプスクリプトを正しく使用するには、少なくとも次の2つの設定を設定します.
タイプスクリプトコンパイラの2つのロールブラウザ動作用変換ファイル からJSの旧バージョンコードタイプエラーチェック 独立して完成!
タイプスクリプトでできることとできないことのタイプのエラーのコードもコンパイルできます(ブロックしたい場合はEmitOnErrorなしに設定します) 実行時にタイプをチェックできない(属性チェック、タグ技術、クラス宣言を使用) .タイプ演算では、実行時にタイプをチェックする必要があります(値制御が必要な場合) ランタイムタイプと宣言タイプが異なる場合があります.覚えておいてください. タイプのスクリプトタイプで、関数リロード はサポートされていません.タイプのスクリプトタイプ影響X→構築時間オーバーヘッド ≪インクリメンタル構築|Incremental Build|emdw≫:コンパイルに関連するレコード・ファイルを保持します.
インクリメンタル構築リファレンスサイト:https://elvanov.com/2524
[物品4]構造タイピングに精通している
JSは、デフォルトのタイプに基づいています(オブジェクトに何らかのタイプに一致する変数とメソッドがある場合は、オブジェクトがそのタイプに属しているとみなされます!)このRATSもモデル化されています
→それでも問題が発生するが標準化する場合、他のインタフェースオブジェクトがインタフェースを離れることなくアクセスする場合、問題が発生する可能性がある .と同様に、Vector 3 Dインタフェースに文字列を含むインタフェースを拡張する場合、個数だけを計算する関数に問題が生じる→ループではなくすべての属性をそれぞれ求めることで を解決する.作成者は、クラス作成者が返したインスタンスのオブジェクトタイプをインタフェースのオブジェクトとしてクラスに貼り付けることもできます.これにより、エラーは発生しません. は逆にテストで構造的にタイプするのが有利です!→論理とテストを抽象(DBインタフェース)により特定の実施形態から分離する .
TSのタイプは常にオープンです.
[アイテム5]anyタイプ禁止タイプセキュリティなし 関数でタグを無視する(呼び出し元によって所定のタイプの入力が提供される必要があり、伝達パラメータが .自動完了等言語サービスX コード再構成時エラー非表示(関数(タイプ: タイプ非表示設計 型システム信頼性低下 第二章
[プロジェクト6]エディタを使用してタイプシステムをブラウズする
インストール・タイプ・スクリプトでは、次の2つの操作を実行できます. tsc 型スクリプトサーバ カーソルを使用してタイプスクリプトサーバがタイプ推定をどのように行うかを決定することは、タイプスクリプトを練習する良い方法です.
→これらのタイプを使用すると、ライブラリがどのようにモデリングされているか、エラーがどのように検出されているかがわかります.だからタイプ宣言ファイルを探しながら勉強!
[item 7]タイプが値の集合であると考える
最小の集合:newυunit type(1つ)υunion type(複数)
タイプ演算子は、値のセットに適しています.
Excludeは、特定のタイプを除外するために使用されますが、結果が適切なタイプのスクリプトタイプの場合に有効です.
[アイテム8]タイプ空間と値空間を区別する記号
タイプスクリプトのシンボルは、タイプ空間または値空間の1つに存在します.
記号をタイプとして区別するか、値として区別するかが重要です!
InstanceType:コンストラクション関数を構築するインスタンスタイプ
Documentation - Utility Types
オブジェクトのプロパティタイプにアクセスするときにカッコを使用します!
✅ p: Person[’first’]
❌ p: Person.first
属性アクセス者
タイプブレークスルーは、指定したタイプを強制し、タイプフィルタにエラーを無視するように要求するため、タイプ宣言を使用する傾向があります.
残りの属性チェック(指定されたProperty以外に他のPropertyがあるかどうかをチェック)は、タイプブレークスルー文Xにも適用されます.
タイプブレークスルーは、DOM要素のインポート時に一般的に適用されます.(開発者がもっと知っている場合)
キャプテンの潘喬はdomで
タイプスクリプトは、基本タイプ(元のタイプ)とオブジェクトRapperタイプをそれぞれモデリングするので、値として使用するかタイプとして使用するかを区別し、タイプとして使用する場合は注意してください.
Github組織アドレス:https://github.com/FEonTheBlock
レポートアドレス:https://github.com/FEonTheBlock/Effective-TypeScript
第1章
[プロジェクト1]タイプスクリプトとJavaScriptの関係を理解する
文法の有効性と動作の焦点は独立した問題である.
つまり、文法が正しくなくても、動作が全くできないわけではありません.
タイプスクリプトは、タイプ推定によってタイプを理解し、タイプインスペクタは問題を検索します.(推定文字列、推定toUpperCaseメソッド)(小文字→大文字)
// city의 타입을 string으로 추론하고
let city = 'new york city';
console.log(city.toUppercase()); // 에러 발생 -> toUpperCase()를 의미하는 것인지?
タイプスクリプトにタイプ構文を追加すると、より多くのエラーが発生します.→states
例(stateのインタフェースまたはタイプを定義して開発者の意図通りに使用する)タイプスクリプトタイプシステムはJavaScriptのランタイム動作を「モデリング」しますが、タイプフィルタによって予期せぬ例外コードも検出されます.
作成したプログラムがタイプチェックに合格しても、実行時にエラーが発生する可能性があります.
const names = ['Alice', 'Bob'];
console.log(names[2].toUpperCase());
配列は範囲内で使用されると仮定していましたが、そうではないため、問題が発生しました.エラーの根本的な原因は、タイプスクリプトが理解する値と実際の値に違いがあることです.(値のタイプを理解する:nameの文字列vs実際の値:undefined)
[プロジェクト2]タイプスクリプトの設定について
タイプスクリプトを正しく使用するには、少なくとも次の2つの設定を設定します.
"noImplicitAny": true, // 암묵적 any 금지(명시적으로 써줘야함)
"strictNullChecks": true, // null, undefined 타입 허용X
→簡単にするにはstrict
ㄱを設置するだけ"strict": true,
コード生成がタイプに依存しないことを理解する[プロジェクト3]タイプスクリプトコンパイラの2つのロール
タイプスクリプトでできることとできないこと
tsc
を効率的にコンパイルするだけでよいインクリメンタル構築リファレンスサイト:https://elvanov.com/2524
[物品4]構造タイピングに精通している
JSは、デフォルトのタイプに基づいています(オブジェクトに何らかのタイプに一致する変数とメソッドがある場合は、オブジェクトがそのタイプに属しているとみなされます!)このRATSもモデル化されています
→それでも問題が発生する
const d: C = { foo: ‘object literal’ } // OK!
console.log(d(일반객체) instanceof C) // false
TSのタイプは常にオープンです.
[アイテム5]anyタイプ禁止
any
タイプを使用すると、タイプチェック、自動完了サービスが失効し、開発経験が悪くなり、信頼性が低下し、使用を避けることができます.any
型の問題any
タイプである場合、タグは無視される)number
)引数として使用する関数(タイプ:any
)のコールバック関数問題)[プロジェクト6]エディタを使用してタイプシステムをブラウズする
インストール・タイプ・スクリプトでは、次の2つの操作を実行できます.
→これらのタイプを使用すると、ライブラリがどのようにモデリングされているか、エラーがどのように検出されているかがわかります.だからタイプ宣言ファイルを探しながら勉強!
[item 7]タイプが値の集合であると考える
最小の集合:newυunit type(1つ)υunion type(複数)
タイプ演算子は、値のセットに適しています.
interface Person {
name: string;
}
interface Lifespan {
birth: Date;
death?: Date;
}
type PersonSpan = Person & Lifespan; -> name, birth, death 속성을 가지고있음
// 객체타입에서
keyof (A&B) = (keyof A) | (keyof B)
keyof (A|B) = (keyof A) & (keyof B)
extendsは部分集合に相当する.Excludeは、特定のタイプを除外するために使用されますが、結果が適切なタイプのスクリプトタイプの場合に有効です.
[アイテム8]タイプ空間と値空間を区別する記号
タイプスクリプトのシンボルは、タイプ空間または値空間の1つに存在します.
記号をタイプとして区別するか、値として区別するかが重要です!
class Cylinder {
radius = 1;
height = 1;
}
const calculateVolume = (shape: unknown) => {
// 값으로 사용된 부분
if(shape instanceof Cylinder) {
// 타입으로 사용된 부분
shape
shape.radius
}
}
上記の例では、クラスが等しいか等しいかであれば、タイプまたは値として使用できます.InstanceType:コンストラクション関数を構築するインスタンスタイプ
Documentation - Utility Types
オブジェクトのプロパティタイプにアクセスするときにカッコを使用します!
✅ p: Person[’first’]
❌ p: Person.first
属性アクセス者
type Tuple = [string, number, Date]
// TupleEl의 타입은 string | number | Date
type TupleEl = Tuple[number] // number가 0, 1, 2 중 하나만 올 수 있으므로(그 의미로 쓰임) 어려움..
タイプ空間と値空間のブレンドfunction email({person: Person, subject: string, body: string}) {}
このように記述すると、JSのalias(別名)と判断し、タイプを値として使用するため、エラーが発生します.そこで、以下のように変更します!function email({
person,
subject,
body,
}: {
person: PresentationStyle;
subject: string;
body: string;
}) {}
[アイテム9]タイプ断言ではなくタイプ宣言を使用タイプブレークスルーは、指定したタイプを強制し、タイプフィルタにエラーを無視するように要求するため、タイプ宣言を使用する傾向があります.
残りの属性チェック(指定されたProperty以外に他のPropertyがあるかどうかをチェック)は、タイプブレークスルー文Xにも適用されます.
タイプブレークスルーは、DOM要素のインポート時に一般的に適用されます.(開発者がもっと知っている場合)
キャプテンの潘喬はdomで
null
の断言文ではなく断言文を使用することを提案した.// like this
function $<T extends HTMLElement>(selector: string) {
const element = document.querySelector(selector);
return element as T;
}
const confirmedTotal = $<HTMLSpanElement>('.confirmed-total');
回避対象Rapperタイプ[アイテム10]タイプスクリプトは、基本タイプ(元のタイプ)とオブジェクトRapperタイプをそれぞれモデリングするので、値として使用するかタイプとして使用するかを区別し、タイプとして使用する場合は注意してください.
// 이렇게 쓰지 말고
const s: String = 'primitive'; (x)
// 이렇게 쓰자! (기본형으로)
const s: string = 'prmitivie'; (o)
Reference
この問題について([効果型スクリプト]-1週目), 我々は、より多くの情報をここで見つけました https://velog.io/@hustle-dev/이펙티브-타입스크립트-1주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol