zoukankan      html  css  js  c++  java
  • [TypeScript] Function Overloads in Typescript

    It's common in Javascript for functions to accept different argument types and to also return different types. In this lesson we learn how to 'teach' Typescript about these dynamic functions so that we can still benefit from the powerful static type analysis.

    const getTasks = (taskname: string, x: any) : any => {
        if(typeof x === 'function'){
            return {taskname, fn: x};
        }
    
        if(Array.isArray(x)){
            return {taskname, deps: x};
        }
    };
    
    const task1 = getTasks('taskname1', ['dep1', 'dep2']);
    const task2 = getTasks('taskname2', function(){});
    
    task1.fn(); // Runtime Error, fn not exists on task1
    task2.deps; // Runtime Error, deps not exists on task2

    In the code above, the IDE cannot help much during the compile time. 

    But if we use Function overloads, then IDE can help to check error:

    interface GroupTask {
        taskname:string
        deps:string[]
    }
    
    interface Task {
        taskname:string
        fn:Function
    }
    
    function getTasks(taskname:string, x:string[]):GroupTask
    function getTasks(taskname:string, x:Function):Task
    function getTasks(taskname:string, x:any):any {
        if (typeof x === 'function') {
            return {taskname, fn: x};
        }
    
        if (Array.isArray(x)) {
            return {taskname, deps: x};
        }
    }
    const task1 = getTasks('taskname1', ['dep1', 'dep2']);
    const task2 = getTasks('taskname2', function () {
    });
    
    task1.fn // Property 'fn' doesn't not exist on type 'GrouptTask'
    task2.deps // Property 'deps' doesn't not exist on type 'Task'
  • 相关阅读:
    centos安装Libzip
    PHP安装
    DWZ主从表界面唯一性验证(自写js)(一)
    JSTL的if...else项目小试
    分享:忙了一辈子,才知道什么是你的
    JSTL时间格式化项目小试
    eclipse中去掉validate的方法
    Java初学者必学的JSTL
    (转)Java程序员应该知道的10个调试技巧
    为什么那些美事没有实现---生活中小事有感
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5592632.html
Copyright © 2011-2022 走看看