zoukankan      html  css  js  c++  java
  • [TypeScript] Using Interfaces to Describe Types in TypeScript

    It’s easy to pass the wrong value to a function. Typescript interfaces are great because they catch errors at compile time or in an IDE. In this lesson we’ll learn how to describe a type shape with Typescript interfaces.

    Using interface to describe an object:

    interface ComicBookCharacter {
        secretIdentity?: string;
        alias: string;
        health: number;
    }
    
    let superHero: ComicBookCharacter = {
        alias: 'Zero',
        health: 8700
    };
    let superVillain: ComicBookCharacter = {
        secretIdentity: "YuLong",
        alias: "YuLong",
        health: 9150
    };
    
    function getSecretIdentity(character: ComicBookCharacter){
        if(character.secretIdentity){
            console.log(`${character.alias} is ${character.secretIdentity}`);
        } else {
            console.log(`${character.alias} has no secret identity`);
        }
    }
    
    getSecretIdentity(superHero);

    Using interface to describe an function:

    interface AttackFunction {
        (opponent: {alias: string; health: number}, attackWith: number): number;
    }
    
    interface ComicBookCharacter {
        secretIdentity?: string;
        alias: string;
        health: number;
    }
    
    function attackFunc(opponent, attackWith){
        opponent.health -= attackWith;
        console.log(`${this.alias} attacked ${opponent.alias}, who's health = ${opponent.health}`);
        return opponent.health;
    }
    
    let superHero: ComicBookCharacter = {
        alias: 'Zero',
        health: 9000,
        strength: 5000,
        attack: attackFunc
    };

    Using extends: Using extends of an interface is clean way to define interface in typescript.

    interface OptionalAttributes {
        strength?: number;
        insanity?: number;
        dexterity?: number;
        healingFactor?: number;
    }
    
    interface ComicBookCharacter extends OptionalAttributes{
        secretIdentity?: string;
        alias: string;
        health: number;
        attack: AttackFunction;
    }

    Code:

    interface AttackFunction {
        (opponent: {alias: string; health: number}, attackWith: number): number;
    }
    
    interface KrustyTheClown {
        alias: string;
        health: number;
        inebriationLevel: number;
        attack: AttackFunction;
    }
    
    interface OptionalAttributes {
        strength?: number;
        insanity?: number;
        dexterity?: number;
        healingFactor?: number;
    }
    
    interface ComicBookCharacter extends OptionalAttributes{
        secretIdentity?: string;
        alias: string;
        health: number;
        attack: AttackFunction;
    }
    
    function attackFunc(opponent, attackWith){
        opponent.health -= attackWith;
        console.log(`${this.alias} attacked ${opponent.alias}, who's health = ${opponent.health}`);
        return opponent.health;
    }
    
    let superHero: ComicBookCharacter = {
        alias: 'Zero',
        health: 9000,
        strength: 5000,
        attack: attackFunc
    };
    let superVillain: ComicBookCharacter = {
        secretIdentity: "YuLong",
        alias: "YuLong",
        health: 7600,
        insanity: 200,
        attack: attackFunc
    };
    
    function getSecretIdentity(character: ComicBookCharacter){
        if(character.secretIdentity){
            console.log(`${character.alias} is ${character.secretIdentity}`);
        } else {
            console.log(`${character.alias} has no secret identity`);
        }
    }
    
    superHero.attack(superVillain, superHero.strength); //"Zero attacked YuLong, who's health = 2600"
  • 相关阅读:
    字符串补充、计算属性、监听属性、vue的项目开发
    斗篷指令、属性指令、表单指令、条件指令、循环指令、js的Array操作、前台数据库、
    Vue框架、挂载点el、插值表达式、过滤器、文本指令、事件指令、js对象补充、js函数补充
    浅谈Mysql和Redis区别
    asyncio
    塞班
    使用conda安装包时出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/free/win-64/repodata.json.bz2>
    Anaconda 安装出现的conda无法使用问题
    广度优先搜索与网络爬虫
    loadrunner安装常见问题
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5944433.html
Copyright © 2011-2022 走看看