如何在Typescript中声明递归Map类型(TS2456:Type alias'*'循环引用自身。)

时间:2018-02-28 02:16:27

标签: typescript

我希望定义一个Map变量,该变量应该包含相同类型的原始值(字符串|数字|布尔值)或其他type Primitive = string | number | boolean; type SafeNestedMap = Map<string, Primitive | SafeNestedMap>; let states: SafeNestedMap = new Map<string, SafeNestedMap>();

我试过这样做:

TS2456: Type alias 'SafeNestedMap' circularly references itself.

然而编译器抱怨:

public int numAdjacent(int row, int col) {
    int numOfTreasure = 0;

    for (int currentCol = col - 1; currentCol <= col + 1; currentCol++) {
        for (int currentRow = row - 1; currentRow <= row + 1; currentRow++) {
            if (currentRow < 0 || currentRow >= mapHeight() || currentCol < 0 || currentCol >= mapWidth()) {
                continue;
            }

            numOfTreasure += hasTreasure(currentRow, currentCol) ? 1 : 0;
        }
    }

    return numOfTreasure;
}

如何正确声明此递归类型?

1 个答案:

答案 0 :(得分:7)

关于interfacetype在TypeScript中的不同之处,有一些非常微妙的细节;类别别名的一个警告是它们可能不是自引用的(这是因为它们会立即展开,而接口会在以后扩展)。

你可以写

interface SafeNestedMap extends Map<string, Primitive | SafeNestedMap> { }