Object类型中不存在属性"map"

kra*_*er1 6 typescript

type MyStructure = Object[] | Object;

const myStructure: MyStructure = [{ foo: "bar" }];

myStructure.map(); // Property 'map' does not exist on type 'MyStructure'. any
Run Code Online (Sandbox Code Playgroud)

库提供此对象的对象或数组.我怎么输入这个?

编辑

我如何访问属性myStructure["foo"],如果myStructure是一个对象?

Fen*_*ton 10

因为你的类型意味着你可以有一个对象,或者你可以有一个数组; TypeScript无法确定哪些成员是合适的.

要对此进行测试,请更改您的类型,您将看到该map方法现在可用:

type MyStructure = Object[];
Run Code Online (Sandbox Code Playgroud)

在您的情况下,实际的解决方案是在尝试使用该map方法之前使用类型保护来检查您是否有数组.

if (myStructure instanceof Array) {
    myStructure.map((val, idx, []) => { });
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用稍微不同的定义来解决您的问题MyStructure,例如:

type MyStructure = any[] | any;
Run Code Online (Sandbox Code Playgroud)

或者更窄:

class Test {
    foo: string;
}

type MyStructure = Test[] | Test;
Run Code Online (Sandbox Code Playgroud)