我试图在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来做到这一点,但我希望尽可能避免这样做,只需允许调用者使用该函数传递的任何内容。
答案 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();
}