programing

as 키워드는 어떤 역할을 합니까?

sourcejob 2023. 2. 28. 23:26
반응형

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의 키워드입니다만, 보충으로서asis 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

반응형