source

TypeScript의 새로운 "as" 연산자와 유형 어사션 사이에 어떤 차이가 있습니까?

manycodes 2023. 3. 12. 10:57
반응형

TypeScript의 새로운 "as" 연산자와 유형 어사션 사이에 어떤 차이가 있습니까?

TypeScript 사양이 type assertion이라고 부르는 것과 어떤 차이가 있습니까?

var circle = <Circle> createShape("circle");

그리고 새로운 것 as연산자:

var circle = createShape("circle") as Circle;

둘 다 보통 컴파일 타임 캐스팅에 사용됩니까?

다른 점은 말이다.as CircleTSX 파일에서는 동작하지만<Circle>가 JSX 구문과 충돌합니다. as이 때문에 도입되었습니다.

예를 들어, 다음 코드는.tsx파일:

var circle = <Circle> createShape("circle");

다음과 같은 오류가 발생합니다.

오류 TS17002: 'Circle'에 해당하는 JSX 닫기 태그가 필요합니다.

하지만,as Circle잘 될 거야

사용하다as Circle이제부터는요.권장 구문입니다.

Wiki 페이지: "TypeScript의 새로운 기능 [1.6]:

신규.tsx파일 확장자 및as교환입니다.

TypeScript 1.6은 새로운 기능을 탑재하고 있습니다..tsx파일 확장자이 확장자는 두 가지 작업을 수행합니다. TypeScript 파일 내에서 JSX를 활성화하고 새로운 확장자를 만듭니다.as기본 캐스트 방법 연산자(JSX 식과 TypeScript 프리픽스 캐스트 연산자 사이의 모호성 제거)예를 들어 다음과 같습니다.

var x = <any> foo; 
// is equivalent to:
var x = foo as any;

한 가지 중요한 차이점은 이 두 연산자의 우선 순위입니다.예를 들어 AssemblyScript에서는 더 엄격한 TypeScript와 같이 둘 중 하나를 사용해야 한다고 생각할 수 있습니다.

const COPY_FROM : usize = <u64>start >>> 6 as usize;

start부호 없는 64비트 정수로 주조된 숫자 유형으로, 6비트씩 오른쪽으로 이동하면 결과는 다음과 같이 주조됩니다.<usize>포인터 타입그것은 정확히 바람직한 행동이다.

하지만

const COPY_FROM : usize = <u64>start >>> <usize>6;

우리가 원하는 것도 아니고 컴파일도 하지 않을 거야아직,

const COPY_FROM : usize = <usize>(<u64>start >>> 6);

더 읽기 어렵고 예쁘지도 않아요.

하지만 내가 알 수 없는 이유로 이해하듯이,as후행 연산자가 되기에는 충분히 낮지 않습니다.예를 들어 위의 코드는 다음과 같습니다.

const COPY_FROM : usize = <u64>start & 63 as usize; // start % 64

그렇다면 그것은 겉으로 보기에 정확해 보이는 것처럼 던지거나 잘못된 결과를 낳을 것이다.as보다 높다&교환입니다.그러니 조심하는 게 좋을 거야

언급URL : https://stackoverflow.com/questions/33503077/any-difference-between-type-assertions-and-the-newer-as-operator-in-typescript

반응형