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"
  • 相关阅读:
    .net4.0注册到IIS ,重新注册IIS ,iis注册
    进制转换
    hasOwnProperty实现剔除数组中重复项
    URLStream加载美术资源
    随机排序数组
    post与get的区别
    【转】二进制、八进制、十进制、十六进制之间转换
    数组的sort方法
    【学习篇】JavaScript访问样式表
    【学习篇】JavaScript去除字符串空格
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5944433.html
Copyright © 2011-2022 走看看