'알 수 없음'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
에만 할당 할 수 있습니다 .unknown
any
당신이 사용해야 할 때의 질문에 대답하려면 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
'Programming' 카테고리의 다른 글
객체 직렬화 대신 Parcelable 사용의 이점 (0) | 2020.08.23 |
---|---|
Hg 지점 폐쇄 (0) | 2020.08.23 |
ansible에서 존재하지 않는 디렉토리를 자동으로 만드는 쉬운 방법은 무엇입니까? (0) | 2020.08.23 |
SQL SELECT 속도 int 대 varchar (0) | 2020.08.23 |
Visual Studio 2017에는 템플릿이 없습니다. (0) | 2020.08.23 |