TS#8:タイプ空間と値空間を区別する符号
7058 ワード
タイプ空間と値空間を区別する記号
typescriptのシンボルは、タイプ空間または値空間の1つに存在します.
象徴がタイプなのか価値なのかを判断するには、文脈から見るべきだ.
もちろん、もっと重要なのは適切な名前をつけて、相応の間違いが起こらないようにすることだと思います.
T1, T2 => Person, (p: Person, subject: string, body: string) => Response
v1, v2 => object, function
だからtsとjsの境界でよく考えなければなりません.
typescriptで構造分解割り当てを行う場合は、タイプと値を区別し、正常に動作するようにそれぞれ明記する必要があります.タイプのスクリプトでは、タイプと値が混同されることが多いため、タイプと値の区別方法を十分に利用する必要があります.
内明も常に注意して、もっとよくしなければなりません. 「foo」は、文字列タイプであってもよいし、文字列タイプであってもよい.二つの状況をよく区別しなければならない. type ofは、それを使用する場合は、値とタイプを慎重に計算する必要があります.
typescriptのシンボルは、タイプ空間または値空間の1つに存在します.
interface Cylinder {
radius: number;
height: number;
}
const Cylinder = (radius: number, height: number) => ({radius, number});
上記のコードではinterfaceがタイプとして使用され、constが値として使用されますが、互いに関連はありません.function calculateVolume(shape: unknown) {
if(shape instanceof Cylinder) {
shape.radius // error
}
上記のコードでは、shpaeがCylinderタイプであるかどうかを確認するためにコードが記述されていますが、instanceofは実行時に行われ、値が参照されているため(値は後述)、関数が参照されてエラーが発生します.象徴がタイプなのか価値なのかを判断するには、文脈から見るべきだ.
もちろん、もっと重要なのは適切な名前をつけて、相応の間違いが起こらないようにすることだと思います.
interface Person {
first: string;
last: string;
}
const p: Person = {first: 'Jane', last: 'Jacobs' };
function email(p: Person, subject: string, body: string): Response {
// ...
}
type T1 = typeof p;
type T2 = typeof email;
const v1 = typeof p;
const v2 = typeof email;
上記のコードでは、T 1、T 2はタイプスクリプトのタイプを返し、v 1、v 2はjs実行時の値である.T1, T2 => Person, (p: Person, subject: string, body: string) => Response
v1, v2 => object, function
だからtsとjsの境界でよく考えなければなりません.
function email({person: Person, subject: string, body: string}) {
// .. 오류
}
function email(
{person, subject, body}: {person: Person, subject: string, body: string}
) {
// ..
}
最初のEメールでエラーが発生し、typescriptで構造割り当てを行うとPerson値に値としてロードされ、stringという変数名で2通割り当てられます.typescriptで構造分解割り当てを行う場合は、タイプと値を区別し、正常に動作するようにそれぞれ明記する必要があります.
内明も常に注意して、もっとよくしなければなりません.
Reference
この問題について(TS#8:タイプ空間と値空間を区別する符号), 我々は、より多くの情報をここで見つけました https://velog.io/@heojeongbo/TS-8-타입-공간과-값-공간의-심벌-구분하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol