• Typescript 查缺补漏


    Types

    Casting:

    let input = xxx as HTMLInputElement;
    let input = <HTMLElement>xxxx;

    Object Shapes:

    Typescript only cares about the shape of an object.

    Interfaces:

    • only describe structure, no implementation
    • don't compile to any js code
    • DRY, easy refactoring
    • open, can be extended later on. (extends)

    any:

    never:

    Nothing can be assigned to never.

    function return type void.

    Classes

    still protofypal inheritance, but better syntax.

    static method:

    static createPerson() {
    }

    instance / public fields:

    class Person {
        static population = 122; // public (static) field
        country = 'China'; // instance field
    
        constructor(name) {
        }
    }

    inheritance:

    class Person : Human {
        constructor() {
            super();
        }
    }

    super.xxx(); // function invoke.

    Species:

        static get [Symbol.species]() {
            return Array;
        }

    Mixins:

    Enums:

    enum Gender {
        Male,
        Female
    }

    Arrays:

    Tuples:

    Fixed length.

    let t2: [string, number];
    t2 = ['angular', 1];

    Type Aliases:

    interface sometimes is not good enough.

    type keyword to define a type alias:

    type Color = [number, number, number];
    let red: Color = [255, 0, 0];

    can be exported.

    Object Literals

    Enhanced:

    let person = {
        __proto__ : String.prototype,
        name: 'Dave',
        company,
        [`${company}Title`]: 'CTO',
        toString() {
            return `${super.toString()}xxx`;
        }
    };

    Destructured Assignment:

    Rest, Spread Properties:

    ...

    rest: and the rest goes here

    spread: and all the properties on this object.

    Getters, Setters:

    Function - Types:

    Functions have a type just like any other value.

    interface can also describe functions:

    interface ClickListener {
        (this: Window, e: MouseEvent): void
    }
    
    const myListender: ClickListener = (e) => {
        console.log(e);
    };

    this, calling context must be window.

    Function - Parameters:

    named, optional, default value, rest parameters(...).

    Generics

    let persons = Array<[String, String]>(20);

    can specify constraints on generic types:

    function calc<T extends number>(x: T, y: T) {
    
    }

    can also be use with interface:

    interface IFileReader<T extends File> {
        read(file: T): Blod
    }

    Access Modifier Keywords:

    public, protected, private

    Function overloading:

    Allows us to have more than one function "head", but a single implementation.

    function add(x: number, y: number): number; // this pattern ok
    function add(x: string, y: string, radix: number): number; // this pattern ok
    
    function add(x: number | string, y: number | string, radix: number = 10): number { // must match 2 patterns above.
        return parseInt(`${x}`, radix) + parseInt(`${y}`, radix);
    }
    add(1, '4'); // not ok

    Iterators & Generators

    Iterators: keeping track of current position, next()

    Iterables

    • support for .. of loop.
    • Requires implementation of Symbol.iteractor method
    • Array, Map already support it.

    Generators:

    • yield
    • function*() syntax
    • returns an iterator
    • State of closure is preserved between .next() calls.
    • Execution Can be Paused (yield).

     

    it.next() goes in the loop, and pause after yield until next it.next() call.

    Iterators:

    The ability to pass values in while iterating.

    console.log(it.next(134).value);

    yield* keyword.

    yield* [1, 2, 3];
  • 相关阅读:
    TextVew中文空格
    java中String字符串的替换函数:replace与replaceAll的区别
    朝花夕拾
    Eclipse启动时卡死在"Android SDK: Resolving error markers"的解决方法
    签名“未签名”apk文件命令
    TODO
    完全卸载AndroidStudio
    Gradle
    经受时间沉淀的15 个 Android 通用流行框架大全
    jquery 获取 新添加元素 点击后 的子元素
  • 原文地址:https://www.cnblogs.com/cgzl/p/8630689.html
Copyright © 2020-2023  润新知