Programming

'알 수 없음'vs. '모두'

procodes 2020. 8. 23. 10:07
반응형

'알 수 없음'vs. '모두'


TypeScript 3.0은 unknown위키에 따라 유형을 소개 합니다.

unknown은 이제 내장 유형이므로 예약 된 유형 이름입니다. 알 수 없음의 용도에 따라 선언을 완전히 제거하거나 (새로 도입 된 알 수없는 유형 선호) 다른 이름으로 이름을 바꿀 수 있습니다.

unknown과의 차이점은 무엇입니까 any? 때 우리는 사용해야 unknown이상 any?


PR 또는 RC 발표unknown 에서 자세한 내용 읽을 수 있지만 요점은 다음과 같습니다.

[..] 어떤 형식이 안전한지 알 수 없음. 모든 것은 unknown에 할당 할 수 있지만 unknown은 유형 어설 션이나 제어 흐름 기반 축소없이 그 자체 외에는 할당 할 수 없습니다. 마찬가지로, 더 구체적인 유형으로 먼저 어설 션하거나 범위를 좁히지 않고는 알 수없는 작업이 허용되지 않습니다.

몇 가지 예 :

let vAny: any = 10;          // We can assign anthing to any
let vUnknown: unknown =  10; // We can assign anthing to unknown just like any 


let s1: string = vAny;     // Any is assigable to anything 
let s2: string = vUnknown; // Invalid we can't assign vUnknown to any other type (without an explicit assertion)

vAny.method();     // ok anything goes with any
vUnknown.method(); // not ok, we don't know anything about this variable

제안 된 사용법은 다음과 같습니다.

TypeScript에서 최소 기능 유형을 설명하고 싶은 경우가 종종 있습니다. 이것은 "이것은 어떤 값도 될 수 있으므로 사용하기 전에 몇 가지 유형의 검사를 수행해야합니다"라는 신호를 보내려는 API에 유용합니다. 이렇게하면 사용자는 반환 된 값을 안전하게 검사해야합니다.


unknown과 any의 차이점은 다음과 같이 설명됩니다.

매우 유사하게 any모든 값을 할당 할 수 있습니다 unknown. 그러나와 달리 any유형이있는 값의 속성에 액세스 할 수 없으며 속성 unknown을 호출 / 구성 할 수도 없습니다. 또한 유형의 값은 또는 unknown에만 할당 할 수 있습니다 .unknownany

당신이 사용해야 할 때의 질문에 대답하려면 unknown이상을 any:

이것은 "이것은 어떤 값도 될 수 있으므로 사용하기 전에 몇 가지 유형의 검사를 수행 해야합니다 "라는 신호를 보내려는 API에 유용 합니다 . 이렇게하면 사용자는 반환 된 값을 안전하게 검사해야합니다.

유형의 변수를 검사하는 유형의 예 와 자세한 설명 TypeScript 3.0 발표unknown참조하십시오.


any 유형:

any유형은 모든 가능한 JS의 값을 나타낸다. 모든 유형은 유형에 할당 할 수 any있습니다. 따라서 유형 any은 유형 시스템의 보편적 인 상위 유형입니다. TS 컴파일러는 입력 된 값에 대한 모든 작업을 허용합니다 any. 예를 들면 :

let myVar: any;

myVar[0];
myVar();
myVar.length;
new myVar();

많은 경우에 이것은 TS 컴파일러에 너무 관대합니다. 즉, 런타임 오류가 발생하는 것으로 알려진 작업을 허용합니다.

unknown 유형:

unknown타입 (처럼 나타내는 any모든 가능한 값 JS). 모든 유형은 유형에 할당 할 수 unknown있습니다. 따라서 유형 unknown은 유형 시스템의 또 다른 범용 상위 유형입니다 (와 함께 any). 그러나 TS 컴파일러 typed 값에 대한 작업을 허용하지 않습니다unknown . 또한 unknown유형은 유형에만 할당 할 수 있습니다 any. 예를 들어이를 명확히 할 수 있습니다.

let myVar: unknown;

let myVar1: unknown = myVar;   // No error
let myVar2: any = myVar;       // No error
let myVar3: boolean = myVar;   // Type 'unknown' is not assignable to type 'boolean'

// The following operations on myVar all give the error:
// Object is of type 'unknown'
myVar[0];
myVar();
myVar.length;
new myVar();

참고 URL : https://stackoverflow.com/questions/51439843/unknown-vs-any

반응형