如何在 TypeScript 中递归声明此类型?

How to recursively declare this type in TypeScript?

我要声明的是一个可以容纳一个字符串的类型,或者一个returns一个字符串的函数,或者一个returns一个returns一个字符串的函数等等。

基本上是这样的,但是递归地并且可能没有我现在拥有的 5 个函数的任意限制。

type NestedStringProvider =
string |
(() => string) |
(() => () => string) |
(() => () => () => string) |
(() => () => () => () => string) |
(() => () => () => () => () => string);

这样我就可以做到:

let s: NestedStringProvider;
s = "foobar"; // ok
s = function () { return () => "string" }; // ok
s = 1; // error

我正在使用 TypeScript 3.1.6。如果这对我的问题有帮助,我会准备升级。

您可以简单地递归引用您的类型:

type NestedStringProvider =
    | string
    | (() => NestedStringProvider);

Checkout a playground link