is 키워드는 타이프스크립트에서 어떤 역할을 합니까?
이렇게 생긴 코드를 발견했어요.
export function foo(arg: string): arg is MyType {
return ...
}
검색하지 못했습니다.is
문서든 구글이든 꽤 흔한 단어이고 기본적으로 모든 페이지에 표시됩니다.
그 상황에서 키워드는 어떤 역할을 합니까?
자세한 내용은 사용자 정의 유형 가드 함수에 대한 참조를 참조하십시오.
function isString(test: any): test is string{
return typeof test === "string";
}
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length); // string function
}
}
example("hello world");
형식 술어 사용test is string
상기의 형식(단순히 사용)으로boolean
반환 타입의 경우) 이후isString()
함수가 반환되면 호출됩니다.true
TypeScript는 함수에 대한 호출에 의해 보호되는 모든 블록에서 유형을 좁힙니다.컴파일러는 다음과 같이 생각할 것이다.foo
이string
아래 보호 블록(아래 보호 블록에만 해당)
{
console.log("it is a string" + foo);
console.log(foo.length); // string function
}
형식 술어는 컴파일 시에만 사용됩니다.그 결과.js
파일(런타임)은 TYPE을 고려하지 않기 때문에 차이가 없습니다.
아래 4가지 예에서 차이점을 설명하겠습니다.
예 1: 위의 예제 코드에는 컴파일 오류나 런타임 오류가 없습니다.
예 2: TypeScript가 타입을 좁혔기 때문에 다음 예제 코드에는 컴파일 오류(런타임 오류도 포함)가 발생합니다.string
확인해보니toExponential
소속되어 있지 않다string
방법.
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
console.log(foo.toExponential(2));
}
}
예: 다음 예제 코드에는 컴파일 오류가 없지만 TypeScript는 다음 유형만 좁히기 때문에 런타임 오류가 발생합니다.string
따라서 보호되고 있지만 그 이후에는 보호되지 않는 블록에서foo.toExponential
컴파일 에러는 생성되지 않습니다(TypeScript는 이 오류를string
type). 단, 실행 시string
를 가지고 있지 않다.toExponential
실행 시 오류가 발생합니다.
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
}
console.log(foo.toExponential(2));
}
예 4: 사용하지 않을 경우test is string
(type 술어), TypeScript는 보호되고 있는 블록 내의 타입을 좁히지 않습니다.다음 예제 코드에는 컴파일 에러는 없지만 런타임 에러는 발생합니다.
function isString(test: any): boolean{
return typeof test === "string";
}
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
console.log(foo.toExponential(2));
}
}
결론은 이다test is string
(type 술어)는 개발자에게 코드가 런타임에러를 일으킬 가능성이 있음을 알리기 위해 컴파일 타임에 사용됩니다.javascript의 경우 개발자는 컴파일 시 오류를 알 수 없습니다.이것이 TypeScript를 사용하는 장점입니다.
제가 아는 유일한 용도는 "type 술어"를 지정하는 것입니다.arg is MyType
)의 사용자 정의 타입 가드입니다.
이 참조의 "사용자 정의 유형 가드"를 참조하십시오.
여기 또 다른 참고 자료가 있습니다.
언급URL : https://stackoverflow.com/questions/40081332/what-does-the-is-keyword-do-in-typescript
'itsource' 카테고리의 다른 글
클래스 메서드에서 'this'가 사용되어야 합니다. (0) | 2023.03.28 |
---|---|
왜 '약속'일까?console.log가 아닌 React 컴포넌트에서 두 번 호출된 경우 (0) | 2023.03.28 |
Angular Material: 매트 셀렉트 기본값 선택 안 함 (0) | 2023.03.28 |
Python에서의 HTTP 응답 해석 (0) | 2023.03.28 |
Json.NET의 부동/이중 소수점 이하(예: 용장 ".0" 없음)를 사용합니까? (0) | 2023.03.28 |