如何在TypeScript中注释递归类型?

Pet*_*son 10 types typescript

如果我有这样的功能:

function say(message: string) {
    alert(message);
    return say;
}
Run Code Online (Sandbox Code Playgroud)

它有一个有趣的属性,我可以链接调用它:

say("Hello,")("how")("are")("you?");
Run Code Online (Sandbox Code Playgroud)

如果我将数字传递给第一个调用,编译器将生成警告,但它允许我将数字放入后续调用中.

say("Hello")(1)(2)(3)(4)
Run Code Online (Sandbox Code Playgroud)

say当我将无效类型传递给链式调用时,我需要向函数添加什么类型的注释以使编译器生成警告?

chu*_*ckj 18

引用自身的类型必须具有名称.例如,

interface OmegaString {
    (message: string): OmegaString;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以注释sayOmegaString,

function say(message: string): OmegaString {
    alert(message);
    return say;
}
Run Code Online (Sandbox Code Playgroud)

然后以下代码将进行类型检查.

say("Hello,")("how")("are")("you?");
Run Code Online (Sandbox Code Playgroud)

但以下不会,

say("Hello")(1)(2)(3)(4)
Run Code Online (Sandbox Code Playgroud)

  • @OldrichSvec你需要一个名称才能引用它,除非有一些特殊的自引用类型关键字,IMO不会经常使用,值得添加. (2认同)