• [TypeScript] Interface and Class


    When to use Interface and when to use Class.

    Let's see one example:

    export interface Lesson {
     courseId: string;
     description: string;
     duration?: string;
     longDescription?: string;
     tags: string | string[];
     url?: string;
     videoUrl: string;
     }
    
    export class Lesson {
      constructor(
                  public courseId: string,
                  public description: string,
                  public duration: string,
                  public longDescription: string,
                  public tags: string | string[],
                  public url: string,
                  public videoUrl: string) {
      }
    }

    We have an Interface 'Lesson' and a Class 'Lesson'. At this point, I would love to say, there is no differece between using interface or using Class. Actually I prefer Interface in this case, because its short-hand syntax.

    We when you want to add more functionalities, you need to using Class instead of Interface.

    For example:

    export class Lesson {
      constructor(public $key: string,
                  public courseId: string,
                  public description: string,
                  public duration: string,
                  public longDescription: string,
                  public tags: string | string[],
                  public url: string,
                  public videoUrl: string) {
      }
    
      get hasVideoUrl() {
        return !!this.videoUrl;
      }
    
      get hasMultiTags() {
        if (this.tags instanceof Array) {
          return true;
        } else {
          return false;
        }
      }
    
      static fromJsonList(array): Lesson[] {
        return array.map(Lesson.fromJson);
      }
    
      static fromJson({
        $key,
        courseId,
        description,
        duration,
        longDescription,
        tags,
        url,
        videoUrl
      }): Lesson {
        return new Lesson($key,
          courseId,
          description,
          duration,
          longDescription,
          tags,
          url,
          videoUrl)
      }
    }

    We add two getter and setter, hasMuliTags and hasVideoUrl. Basiclly we add two more props into the class dynamically based on other props.

    'fromJson' & 'formJsonList' are two static function, which helps to stucture our Lesson instance, in Angualr2 we can use like this:

    // Service
    
    @Injectable()
    export class CourseService {
      lessons$: FirebaseListObservable<Lesson[]>;
    
      constructor(private rt: RealtimeService) {
        this.lessons$ = rt.getLessonObs();
      }
    
      getLessons() {
        return this.lessons$
          .map(Lesson.fromJsonList);
      }
    }
  • 相关阅读:
    .NET 环境中使用RabbitMQ
    WPF窗口模板——Style样式
    C#获取当前日期时间
    C#解析JSON字符串总结
    c#简单加密和对称加密
    List<T>转换为二维数组
    java后台导出pdf
    C# 创建 读取 更新 XML文件
    python 第三天
    编写登录接口
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5935369.html
Copyright © 2020-2023  润新知