在TypeScript中提取函数的返回类型

时间:2014-06-29 19:25:37

标签: typescript

我试图在TypeScript中获取函数的返回类型的引用。更具体地说,我想这样做,以便我可以获得对函数返回的隐式定义类型的引用。

这是我之后的一个例子。以下是两个单独的文件。第一个编译正确;第二个没有。它展示了我希望能做什么,但不知道如何完成。

wrapName.ts

function wrapName(name:string) {
  return { getName: () { return name; };
}

export = wrapName

app.ts

import wrapName = require("./wrapName");
var name = wrapName("Viper");
var NameWrapper = typeof(name);
fn1(name);

function fn1(name:NameWrapper):string {
  return name.getName();
}

我认识到我可以通过明确声明NameWrapper来做到这一点,但我希望尽可能避免这样做,只需允许调用者使用该函数传递的任何内容。

3 个答案:

答案 0 :(得分:1)

首先wrapName.ts有一些语法错误,修复版本:

function wrapName(name: string) {
    return {
        getName: () => {
            return name;
        }
    };
}

export = wrapName;

现在供您使用。我还没有找到为NameWrapper创建新别名(typeof foo)的方法。但您可以使用typeof foo本身:

import wrapName = require("./wrapName");

var NameWrapper = wrapName("Viper");

fn1(NameWrapper);

function fn1(name: typeof NameWrapper): string {
    return name.getName();
}

答案 1 :(得分:0)

如何使用函数而不是类型(javascript毕竟是函数式语言,函数是一等公民)

function wrapName(name:string): () => string {
    return () => { return name }
}





function fn1(wrapper:()=> string):string {
    return wrapper()
}

var wrapper = wrapName("Viper")
console.log(fn1(wrapper))

答案 2 :(得分:0)

我猜你错过了NameWrapper声明。它是type,而不是var

<强> wrapName.ts

function wrapName(name: string) {
    return {
        getName: () => { return name; }
    }
}

export = wrapName;

<强> app.ts

import wrapName = require("./wrapName");
var name = wrapName("Viper");
type NameWrapper = typeof name; // <-- change 'var' to 'type'
fn1(name);

function fn1(name: NameWrapper): string {
    return name.getName();
}