码迷,mamicode.com
首页 > 其他好文 > 详细

[TypeScript] Function Overloads in Typescript

时间:2016-06-17 06:15:16      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

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‘

 

[TypeScript] Function Overloads in Typescript

标签:

原文地址:http://www.cnblogs.com/Answer1215/p/5592632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!