タイプスクリプト
デフォルトでは、タイプスクリプトはタイプ推定を提供します.
タイプが明確でない場合、TSは自ら判断して明確に説明する.
しかし推論はどこからどこまでが基準なので難しい.
(多くの設定が見られます)
tsconfig.json
structural type system nominal type system duck typing
代表的なものは
duckタイプは構造化タイプシステムとほぼ似ている.
duckタイプは
タイプ互換性
タイプが明確でない場合、TSは自ら判断して明確に説明する.
しかし推論はどこからどこまでが基準なので難しい.
tsconfig.json
ファイルで設定できます.(多くの設定が見られます)
tsconfig.json
コラボレーションには、実施者とユーザーがいます.
実施者が推定を主実施関数とする場合、ユーザは他のタイプのパラメータを意図的に挿入する可能性がある.
したがって,このような事態を防止するためにtsconfig.jsonには、実施者にエラーを通知するための多くのオプションがあります.
次のオプションのデフォルトはtrue
です.
noImplicitAny
any 타입으로 암시한 표현식과 선언에 오류를 발생시킵니다.
パラメータにタイプが指定されていない場合.
a現在anyタイプと推論されている."noImplicitAny": true
function num(a) {
return a * 30
}
console.log(num(2)); // 60
console.log("hello"); // error
コンパイル手順にエラーが発生しました.noImplicitAny
オプションがオンの場合、タイプスクリプト
「ある場合は、任意のタイプまたは他のタイプを直接指定してください.」出力エラー.function num(a:number) {
return a * 30
}
console.log(num(2)); //60
console.log("hello"); // 오류
strictNullChecks
あなたがタイプを明確にしたと仮定しましょう.
パラメータのタイプは指定されていますが、戻り値のタイプは指定されていません.
次に、タイプスクリプトは2つのnumber|undefinedを自動的に返します.
nullとundefinedはすべてのタイプのサブタイプであるためです.function num(a:number){ //function num(a: number): number | undefined
if(a>0){
return a * 30;
}
}
console.log(num(2));
console.log(num(-5)+5); // NAN 인데 오류 출력을 안함
でも問題があるaに負の値を挿入するとundefinedが返されます.
NANを返します.ここに5が追加されているからです.
戻り値に数字を1つだけ指定したらどうなりますか?function num(a:number):number{
if(a>0){
return a * 30;
}
}
console.log(num(-5)+5); // NAN 인데 오류 출력을 안함
タイプスクリプトはnumber値のみが指定されている場合でもundefinedをnumberに含めます.
エラーを出力しません.
この場合、strictNullChecks
をtrue
とすると、
すべてのタイプがnullとundefinedで削除され、エラーが発生しました.
タイプシステム
プログラム言語には多くのタイプのシステムがあります.
function num(a) {
return a * 30
}
console.log(num(2)); // 60
console.log("hello"); // error
function num(a:number) {
return a * 30
}
console.log(num(2)); //60
console.log("hello"); // 오류
function num(a:number){ //function num(a: number): number | undefined
if(a>0){
return a * 30;
}
}
console.log(num(2));
console.log(num(-5)+5); // NAN 인데 오류 출력을 안함
function num(a:number):number{
if(a>0){
return a * 30;
}
}
console.log(num(-5)+5); // NAN 인데 오류 출력을 안함
プログラム言語には多くのタイプのシステムがあります.
structural type system
구조적 자료형 체계
と呼ばれるstructural type system
これもタイプスクリプトのデータ構造です.名前が異なるが構造が同じである場合は、同じとみなされます.ex) (OCaml Go TypeScript Scala)
nominal type system
명목적 자료형 체계
と呼ばれるnominal type system
継承を宣言しない場合は、構造が一致しても別のタイプとみなされます.代表的なものは
C++, C#, Java, 오브젝티브-C, Delphi, Swift, Rust
など.duck typing
duckタイプは構造化タイプシステムとほぼ似ている.
duckタイプは
동적 언어
であり、構造タイプシステムには정적 언어
の差がある.タイプ互換性
タイプスクリプトは、大きなタイプに小さなタイプを割り当てることができます.ここの小さいタイプは서브타입
です.let subtype : 1 =1;
let supertype :number=subtype
subtype = supertype //오류 발생
supertype : number
subtype : 1
番号は1を指定できます.
ただし、数字1の数字タイプは割り当てられません.let subtype :[number, number] = [1,2]
let supertype:number[] = subtype
subtype = supertype; // 오류 발생
同様にtupleは配列のサブタイプである.パターンにピンを割り当てることはできますが、反対にすることはできません.any
を見てみましょう.
何でも受け取れるタイプ.だから彼は最高のタイプです.
anyは何でも受け入れることができ、逆も同じだ.let subtype : number =1;
let supertype:any = subtype;
subtype = supertype //오류 없음
anyは特殊なタイプなので、1にanyを指定できます.😨
anyなどの特殊な場合を除き、ほとんどのスーパータイプはサブタイプに割り当てられません.
Reference
この問題について(タイプスクリプト), 我々は、より多くの情報をここで見つけました
https://velog.io/@hb-developer/타입스크립트
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
let subtype : 1 =1;
let supertype :number=subtype
subtype = supertype //오류 발생
let subtype :[number, number] = [1,2]
let supertype:number[] = subtype
subtype = supertype; // 오류 발생
let subtype : number =1;
let supertype:any = subtype;
subtype = supertype //오류 없음
Reference
この問題について(タイプスクリプト), 我々は、より多くの情報をここで見つけました https://velog.io/@hb-developer/타입스크립트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol