2016-11-15 11 views
0

typeScript Union Types를 실험하고 있습니다. 나는 숫자 속성 클래스를 가지고 있지만, 나는 세 가지 특별한 경우 갖고 싶어 : 무한, 없음 및 자동TypeScript Union Types 숫자 또는 특정 문자열

무한대 없음 각각 Number.POSITIVE_INFINITYNULL로 표현 될 수 있지만, 내가 무엇을 해야할지 모르겠어요 자동 가치에 대해서.

이 값은 원래 문자열로 표시되는 XML 문서로 제공됩니다. 예를 들어 <element myValue="123"/><element myValue="-4096"/><element myValue="infinity"/><element myValue="auto"/> 또는

<element/> 어떻게 숫자로 사용하지만 여전히 사용할 수있는 자동 값을 가질 수있는 노동 조합 유형을 만들 수 있습니다. 번호와 Enum이있는 조합 유형에 대해 생각했지만 최선을 다할 수있는 방법을 모르겠습니다.

팁이 있습니까?

class MyClass { 
    name: string; 
    duration: number; // Want to support None/Null, Infinity and Auto 
} 

답변

1

하지만 자동 가치에 대해 무엇을 해야할지하지 않습니다

둘 다 우리 것이다. 예를 들어 자동 값의 예를 입력해야합니다. 1은 유효한 auto 값입니다. 나는 그것이 의심스럽고 의심된다. ​​모두 숫자들이 유효하다. 그래서 duration : number | null

+0

1은 자동차 값이 아닙니다. 자동은 특별한 로직을 트리거해야하는 고유 한 값이므로 "null"로 할 수있는 값으로 "auto"를 사용해야합니다. Michael Liu의 대답은 내가 필요한 것처럼 보입니다. – user3336731

3

이 유형의 주석에 문자열 리터럴 'auto' 사용을 고려 유형의 주석을 사용합니다 :. 내가 누락 된 값을 나타내는 대신 nullundefined을 사용하여 다음

class MyClass { 
    name: string; 
    duration: number | undefined | 'auto'; 
} 

을 (아직하지 않은 경우 타이프 스크립트 2.0을 사용하여,

이 유형 약어는 Number.POSITIVE_INFINITY 포함 번호(), undefinedduration-'auto'을 할당 할 수 있습니다). undefined 생략하지만, 다른 문자열은 아닙니다.

샘플 사용 :

var c = new MyClass(); 
// ... 

if (c.duration === undefined) { 
    // ... 
} else if (c.duration === 'auto') { 
    // ... 
} else { 
    // In this branch, the type of c.duration will be number. 
    // ... 
} 
+0

이것은 멋지다! 그냥 내가 뭘 찾고 있었는지! 이전에 문자열 리터럴을 살펴 봤지만 컴파일러 오류가 발생했습니다. 아마도 typescript 컴파일러의 이전 버전을 사용하고있을 것입니다. TypeScript 2.0으로 업그레이드 할 것입니다. – user3336731

+1

@ user3336731 : 문자열 리터럴 형식이 TypeScript 1.8에 도입되었습니다. –