TypeScript에서 Enum like type을 생성하는 방법
Google maps API for TypeScript 정의 파일을 만들고 있습니다.
그리고 예를 들어 열거형과 같은 유형을 정의해야 합니다. google.maps.Animation
성질을 있다, 즉, 두 가지 성질이 있습니다.BOUNCE
★★★★★★★★★★★★★★★★★」DROP
.
TypeScript에서 이 작업을 수행하는 방법은 무엇입니까?
TypeScript 0.9+에는 다음과 같은 Enum 사양이 있습니다.
enum AnimationType {
BOUNCE,
DROP,
}
마지막 쉼표는 옵션입니다.
TypeScript 0.9(현재 Alpha 릴리스)에서는 다음과 같이 열거 정의를 사용할 수 있습니다.
enum TShirtSize {
Small,
Medium,
Large
}
var mySize = TShirtSize.Large;
기본적으로는 이러한 열거에는 각각 0, 1 및 2가 할당됩니다.이러한 숫자를 명시적으로 설정하려면 열거 선언의 일부로 설정할 수 있습니다.
리스트 6.2 명시적인 멤버를 포함한 열거
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
이 두 예시는 JavaScript 프로그래머용 TypeScript에서 직접 추출되었습니다.
이는 0.8 사양과는 다릅니다.0.8 사양은 다음과 같습니다. 그러나 실험 사양으로 표시되어 변경 가능성이 높기 때문에 이전 코드를 업데이트해야 합니다.
면책사항 - 이 0.8 예는 TypeScript 컴파일러의 새로운 버전에서는 파손될 수 있습니다.
enum TShirtSize {
Small: 3,
Medium: 5,
Large: 8
}
var mySize = TShirtSize.Large;
이것은 이제 언어의 일부입니다.이에 대한 매뉴얼은 TypeScriptLang.org > Basic Types > enum 을 참조하십시오.이러한 에넘의 사용 방법에 관한 문서의 발췌.
enum Color {Red, Green, Blue};
var c: Color = Color.Green;
또는 수동 백업 번호:
enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;
, 수도 있습니다.Color[2]
.
이 모든 것이 어떻게 조합되는지를 나타내는 예를 다음에 제시하겠습니다.
module myModule {
export enum Color {Red, Green, Blue};
export class MyClass {
myColor: Color;
constructor() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
}
}
var foo = new myModule.MyClass();
이 로그는 다음과 같습니다.
undefined 2 Blue
왜냐하면 이 글을 쓸 때 Typescript Playground는 다음 코드를 생성하기 때문입니다.
var myModule;
(function (myModule) {
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(myModule.Color || (myModule.Color = {}));
var Color = myModule.Color;
;
var MyClass = (function () {
function MyClass() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
return MyClass;
})();
myModule.MyClass = MyClass;
})(myModule || (myModule = {}));
var foo = new myModule.MyClass();
id/string 열거형에는 다음 항목이 있습니다.
class EnumyObjects{
public static BOUNCE={str:"Bounce",id:1};
public static DROP={str:"Drop",id:2};
public static FALL={str:"Fall",id:3};
}
업데이트:
@iX3에서 알 수 있듯이 Typescript 2.4는 열거 문자열을 지원합니다.
참조: Typescript에 문자열 값을 사용하여 열거형 작성
원답:
String 멤버 값의 경우 TypeScript는 숫자만 열거 멤버 값으로 허용합니다.그러나 구현할 수 있는 솔루션/해킹이 몇 가지 있습니다.
해결책 1:
복사원: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/
간단한 해결책이 있습니다.할당하기 전에 문자열 리터럴을 any에 캐스트합니다.
export enum Language {
English = <any>"English",
German = <any>"German",
French = <any>"French",
Italian = <any>"Italian"
}
솔루션 2:
복사원: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
문자열 리터럴을 유형으로 사용할 수 있습니다.예를 들어 다음과 같습니다.
let foo: 'Hello';
여기서는 foo라는 변수를 만들었습니다.이 변수에 리터럴 값 'Hello'만 할당할 수 있습니다.이것은, 이하에 나타냅니다.
let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
그 자체로는 그다지 유용하지 않지만, 형식 조합으로 조합하여 강력한(그리고 유용한) 추상화를 만들 수 있습니다.
type CardinalDirection =
"North"
| "East"
| "South"
| "West";
function move(distance: number, direction: CardinalDirection) {
// ...
}
move(1,"North"); // Okay
move(1,"Nurth"); // Error!
타이프 스크립트의 에넘:
이름 있는 상수 집합을 정의하기 위해 Enum을 타이프스크립트 언어로 입력합니다.에넘을 사용하는 것은 우리의 삶을 더 쉽게 만들 수 있다.그 이유는 이러한 상수가 열거형이 나타내는 값보다 읽기 쉽기 때문입니다.
열거형 작성:
enum Direction {
Up = 1,
Down,
Left,
Right,
}
이 타이프스크립트 문서의 예는 enum의 구조를 매우 잘 설명하고 있습니다.첫 번째 열거값(Up)은 1로 초기화됩니다.그런 다음 숫자 열거의 다음 멤버는 모두 이 값에서 자동으로 증가합니다(즉, 아래 = 2, 왼쪽 = 3, 오른쪽 = 4).첫 번째 값을 1로 초기화하지 않으면 열거형이 0에서 시작된 다음 자동으로 증가합니다(예: 아래 = 1, 왼쪽 = 2, 오른쪽 = 3).
열거형 사용:
다음 방법으로 열거형 값에 액세스할 수 있습니다.
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;
이렇게 하면 코드를 작성하는 방법이 훨씬 더 설명적이 됩니다.에넘은 기본적으로 마법의 숫자(프로그래머가 특정 컨텍스트에서 의미를 부여했기 때문에 어떤 엔티티를 나타내는 숫자)를 사용하는 것을 금지합니다.매직 넘버는 다음과 같은 이유로 좋지 않습니다.
- 우리는 더 잘 생각해야 합니다. 우리의 코드를 추론하기 전에 먼저 숫자를 엔티티로 변환해야 합니다.
- 오랜 시간이 지난 후 코드를 검토하거나 다른 프로그래머가 코드를 검토하면 이 숫자들이 무엇을 의미하는지 알 수 없습니다.
다음과 같이 enum을 입력할 수 있습니다(개체로 루프할 수도 있습니다).
enum: { [x: string]: string }
지도 예:
export const yourFunction = (
enum: { [x: string]: string },
) => {
const iHaveBeenMapped = Object.keys(enum).map((key) => {
const enumValue = enum[key];
});
}
언급URL : https://stackoverflow.com/questions/12687793/how-to-create-enum-like-type-in-typescript
'programing' 카테고리의 다른 글
Spring Boot 버전을 2.0.3에서 변경할 때 문제가 발생합니다.릴리스 2.1.0.빌드 스냅샷 (0) | 2023.03.29 |
---|---|
MongoDb 합계 쿼리 (0) | 2023.03.29 |
잭슨과의 JSON 역직렬화 커스텀 (0) | 2023.03.29 |
Woocommerce 숍 페이지 커스텀템플릿 (0) | 2023.03.29 |
데이터베이스가 다운된 경우에도 Spring 서버를 부팅하려면 어떻게 해야 합니까? (0) | 2023.03.29 |