Tìm kiếm trang web

javascript - Cách sử dụng Enum đúng cách trong switch của TypeScript


Tôi có cái này trong một tập tin:

export module  Utils {
    export enum DataSources {
        SharepointList = "SharepointList",
        JsonData = "JsonData"
    };
}

và trong một tệp khác tôi có cái này:

import CustomerDAO from "./ICustomerDAO";
import SharepointListDAOFactory from "./SharepointListDAOFactory";
import JsonDAOFactory from "./JsonDAOFactory";
import {Utils} from "./DatasourcesEnum";


export default abstract class DAOFactory{

    public static SHAREPOINTLIST: number = 1;
    public static REMOTEJSON : number = 2;

    public abstract getCustomerDAO(): CustomerDAO;

    public  static getDAOFactory(whichFactory: Utils.DataSources): DAOFactory {   
      switch (whichFactory) {
        case whichFactory.SharepointList: 
            return new SharepointListDAOFactory();
        case whichFactory.JsonData: 
            return new JsonDAOFactory();      
        default  : 
            return null;
      }
    }
}

Nhưng tôi nhận được những lỗi này:

Property 'SharepointList' does not exist on type 'DataSources'.

Câu trả lời #1

Tôi không chắc lỗi mà bạn gặp phải có nghĩa là gì. Dường như bạn đã mắc lỗi với enum của mình. Bạn đang sử dụng giá trị được gán chứ không phải chính enum trong câu lệnh switch của bạn.

public  static getDAOFactory(whichFactory: Utils.DataSources): DAOFactory {   
   switch (whichFactory) {
     case Utils.DataSources.SharepointList: 
       return new SharepointListDAOFactory();
     case Utils.DataSources.JsonData: 
       return new JsonDAOFactory();      
     default  : 
       return null;
   }
 }

Định danh whichFactory sẽ có một giá trị nào đó được phản ánh trong Utils.DataSources, và bạn sẽ muốn so sánh dữ liệu với chính enum. Giá trị sẽ không chứa enum các nguồn dữ liệu khác bên trong nó.