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()함수가 반환되면 호출됩니다.trueTypeScript는 함수에 대한 호출에 의해 보호되는 모든 블록에서 유형을 좁힙니다.컴파일러는 다음과 같이 생각할 것이다.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는 이 오류를stringtype). 단, 실행 시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 |