as 키워드는 어떤 역할을 합니까?
if (process.env.NODE_ENV !== 'production') {
(WithUser as any).displayName = wrapDisplayName(Component, 'withUser');
}
나는 심지어 잘 모르겠다.as
키워드입니다.어쨌든 자바스크립트에서는 어떤 역할을 할까요?
그것은 바닐라 JavaScript가 아니라 TypeScript입니다. as any
는 컴파일러에 대해 입력된 객체를 일반 비입력 JavaScript 객체로 간주하도록 지시합니다.
그as
키워드는 TypeScript의 TypeAssertion으로 컴파일러가 오브젝트를 추론하는 타입과는 다른 타입으로 간주하도록 컴파일러에 지시합니다.
Vanilla JS가 아닌 TypeScript입니다.as
그 자체:이것은 타입 어설션이라고 불리며, 컴파일러에게 무엇인가를 타입으로 취급하도록 지시하는 것입니다.
var a = 'TEST STRING'
var b = a as string; //Means the compiler will assume it's a string
다음과 같습니다.
var a = 'TEST STRING'
var b = <string> a;
단, JSX(html 태그가 있는 JS)를 사용할 때는 혼란스러울 수 있습니다.따라서 이 경우as
구문을 사용하는 것이 좋습니다.
Typescript 연산자로 ECMAScript 2015(Javascript의 최신 릴리스)에서는 사용할 수 없습니다.
위의 답변에서 알 수 있듯이 'as' 연산자는 유형 어설션의 한 형태입니다.
예를 들어 두 가지 유형이 있다고 가정합니다.첫 번째와 두 번째메서드를 작성 중인데 메서드는 객체의 유형을 정확히 알 수 없습니다.타입은 First 또는 Second일 수 있습니다.
따라서 변수를 엄밀한 유형 없이 선언합니다.메서드가 변수가 취해야 하는 유형을 인식하면 '그 유형으로' 반환할 수 있습니다.
이는 약간 모호하고 모호해 보였지만, 'as' 연산자는 실제로 다른(더 친숙한) 패턴과 동일한 기능을 수행합니다.
이 두 개의 코드 조각은 정확히 같은 일을 한다.
let accountCode = '123';
let castedAccountCode = <number>accountCode;
키워드로 사용:
let accountCode = '123';
let castedAccountCode = accountCode as number;
이런 종류의 주장은 쓸모가 없다.
function foo (a: string, b: string): number {
return (a as number) + (b as number)
}
간단히 전이가 되다
function foo(a, b) {
return a + b;
}
처음에는 이렇게 될 줄 알았는데
function foo(a, b) {
if (typeof a != 'string') throw ...
if (typeof b != 'string') throw ...
return Number(a) + Number(b)
}
하지만 아닙니다. TS는 사용자에게 잘못된 보안감을 줍니다.
상기의 회답이 그 말을 가리키고 있듯이.as
원래 질문의 코드에 있는 키워드는 TypeScript의 키워드입니다만, 보충으로서as
is context 키워드 in JavaScript - 코드가 구문 규칙 ImportClause에 들어가는 경우
키 맵핑as
제공된 OP의 예에서는as
키워드는 Type Assertion에 사용됩니다.TypeScript 4.1 이후로는as
키워드는 타입 아사션뿐만 아니라 키 매핑에도 사용할 수 있습니다.이를 통해 유형의 키를 다시 매핑할 수 있습니다.예:
type Person = {
name: string;
age: number;
};
type Getters<T> = {
[K in keyof T as `get${Capitalize<K & string>}`]: () => T[K];
};
type MappedPerson = Getters<Person>;
// type MappedPerson = {
// getName: () => string;
// getAge: () => number;
// }
Generic & Template Literal Types는 여기서 매우 우수합니다.키 매핑은 매우 강력한 기능입니다.키를 값의 유형에 매핑할 수도 있기 때문입니다.예를 들어 Conditional Types를 사용하여 키의 해당 값 유형을 기준으로 객체 속성을 필터링할 수 있습니다.유형의 모든 속성을 제거한다고 가정합니다.number
Person
삭제:
type WithoutPropertiesOfTypeNumber<T> = {
[K in keyof T as T[K] extends number ? never : K]: T[K];
};
type PersonWithoutPropertiesOfTypeNumbers =
WithoutPropertiesOfTypeNumber<Person>;
// type PersonWithoutPropertiesOfTypeNumbers = {
// name: string;
// }
언급URL : https://stackoverflow.com/questions/55781559/what-does-the-as-keyword-do
'programing' 카테고리의 다른 글
ASMX 파일에서 JSON을 출력하는 방법 (0) | 2023.02.28 |
---|---|
오라클 인덱스를 선택하고 최적화하는 방법 (0) | 2023.02.28 |
Java의 Mono 클래스: 무엇을 언제 사용할 수 있습니까? (0) | 2023.02.28 |
HTTP Client 응답으로부터의 GZip 스트림 압축 해제 (0) | 2023.02.28 |
차트JS 꺽은선형 차트 - 선 아래 색 제거 (0) | 2023.02.28 |