TypeScript의 새로운 "as" 연산자와 유형 어사션 사이에 어떤 차이가 있습니까?
TypeScript 사양이 type assertion이라고 부르는 것과 어떤 차이가 있습니까?
var circle = <Circle> createShape("circle");
그리고 새로운 것 as
연산자:
var circle = createShape("circle") as Circle;
둘 다 보통 컴파일 타임 캐스팅에 사용됩니까?
다른 점은 말이다.as Circle
TSX 파일에서는 동작하지만<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
'source' 카테고리의 다른 글
웹 팩: ng-include에 대한 요구 사용 (0) | 2023.03.12 |
---|---|
"쉼표 연산자의 왼쪽..렌더링의 html 내용에 오류가 있습니다. (0) | 2023.03.12 |
Gson은 다형 객체 목록을 직렬화합니다. (0) | 2023.03.12 |
커스텀 이미지 처리/관리 방법 (0) | 2023.03.12 |
Mac OS X에서 mongod를 멈추는 깨끗한 방법은 무엇입니까? (0) | 2023.03.07 |