Cách nhập một Enum


82

Tôi đã tạo một enum, nhưng tôi gặp sự cố khi nhập và sử dụng enum trong VS15.

Đây là enum được chứa trong enums.ts:

enum EntityStatus {
     New = 0,
     Active = 1,
     Archived = 2,
     Trashed = 3,
     Deleted = 4
}

Visual Studio nhìn thấy enum này mà không cần nhập và do đó không đưa ra lỗi thời gian biên dịch. Nhưng trong thời gian chạy, một lỗi sẽ xảy ra

 Cannot read property 'Archived' of undefined.

Vì vậy, bây giờ tôi cố gắng nhập nó giống như nhập các lớp khác:

 import {EntityStatus} from "../../core/enums";

Visual Studio hiện đưa ra lỗi thời gian biên dịch:

 "...enums is not a module ..."

Vậy làm cách nào để nhập enum?


vấn đề tương tự cho tôi.
— Jayani Sumudini

Câu trả lời:


107

Tôi đã thiếu từ khóa xuất:

 export enum EntityStatus {
      New = 0,
      Active = 1,
      Archived = 2,
      Trashed = 3,
      Deleted = 4
 }

Sau đó, nó hoạt động như mong đợi.


10
Hãy chắc chắn để có điều này trong vòng a *.ts. *.d.tscác tệp sẽ không hoạt động. Một cạm bẫy tôi đã gặp phải.
— Martin Braun

28

Bạn sẽ gặp phải Cannot read property 'Foo' of undefined.lỗi thời gian chạy tương tự khi bạn tình cờ xác định Enum của mình trong một trong các tệp Khai báo TypeScript ( *.d.ts) vì các tệp này không được chuyển sang JavaScript.

Có thể tìm thấy thêm chi tiết với một ứng dụng mẫu tại đây .


Tôi không nghĩ rằng * .d.ts sẽ là một nơi tốt để xác định một Enum.
— Greg Gum

4
Tôi cũng vậy. Đặc biệt là sau thời gian lãng phí bằng cách tìm ra lý do tại sao enum của tôi không được định nghĩa :)
— luk355

Sau đó, bạn có thể chỉ cần sử dụng một đối tượng để xuất mã trong một tệp .js riêng biệt, ví dụ: export const EReviewStatus = {PENDING: 'PENDING', SENT: 'SENT'}
— TeemuK

23

Vui lòng thử cái này. Nó phù hợp với tôi

enums.ts

export enum  Category {Cricket,Tennis,Golf,Badminton}

và nhập tệp .ts bắt buộc như cách được cung cấp bên dưới:

import {Category} from './enums'

19

Chỉ cần chạy qua một cái gì đó tương tự. Trong trường hợp của tôi, tôi phải đảm bảo tên enum được xuất khác với tên của tệp.

I E.

export enum AccessMode trong file access-mode.ts sẽ không thành công. export enum AccessMode trong tệp access-mode.ts sẽ hoạt động.


4
đáng ngạc nhiên là nó cũng làm việc cho tôi. Bạn có biết lý do cho điều này, tại sao điều này lại xảy ra?
— Neeraj Jain

Câu trả lời này đã giúp tôi "khắc phục" một vấn đề với Rollup trong đó nó sẽ không xuất enum của tôi.
— Sipke Schoorstra

1

Như @Sachin Kalia đã nói, tôi gặp vấn đề với việc nhập khẩu.

Tôi đã thay đổi điều này:

import {MessageAction, MessageDTO} from '../../../generated/dto';

đến điều này:

import {MessageDTO} from '../../../generated/dto';
import {MessageAction} from '../../../generated/dto'

MessageAction là enum của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.