在打字稿中返回两种类型的函数

时间:2018-09-08 12:45:54

标签: typescript

我有图书馆,已经添加了打字稿定义类型,我正在测试是否正确。我有两个函数:set_promptget_prompt第一个函数接受字符串和函数,并且我想使用get_prompt的返回值作为函数或字符串:

我有这样的代码:

var fn: (cb: (prompt: string) => void) => void =  term.get_prompt();
var prompt: string = term.get_prompt();

并在第二个代码上引发错误

我的d.ts文件具有如下代码:

declare namespace JQueryTerminal {
    type setStringFunction = (value: string) => void;
    type ExtendedPrompt = ((this: JQueryTerminal, setPrompt: setStringFunction) => (void | PromiseLike<string>));
}
interface JQueryTerminal<TElement = HTMLElement> extends JQuery<TElement> {
    set_prompt(prompt: JQueryTerminal.ExtendedPrompt | string): JQueryTerminal;
    get_prompt(): JQueryTerminal.ExtendedPrompt;
    get_prompt(): string;
}

我的第一个代码在| string的末尾有ExtendedPrompt,但这引发了两个错误。

是否可以使用具有两种不同类型的函数的返回值?

我尝试过使用泛型:

get_prompt<T = string>(): T;

但是它适用于任何类型,是否可以将类型限制为字符串和JQueryTerminal.ExtendedPrompt

1 个答案:

答案 0 :(得分:1)

我认为您正在搜索:

function get_prompt<T extends (JQueryTerminal.ExtendedPrompt | string)  = string>(): T;