2016-09-25 143 views
1
type MyStructure = Object[] | Object; 

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

myStructure.map(); // Property 'map' does not exist on type 'MyStructure'. any 

該庫提供一個對象或該對象的數組。我怎樣才能輸入這個?屬性'map'在類型上不存在

編輯

我怎樣才能訪問諸如myStructure["foo"]性質的myStructure情況下將是一個對象呢?

回答

0

因爲你的類型意味着你可以有一個對象,或者你可以有一個數組; TypeScript無法確定哪些成員是合適的。

爲了驗證這一點,改變你的類型,你會看到map方法現已可用:

type MyStructure = Object[]; 

在你的情況,實際的解決方案將是使用型後衛來檢查是否有嘗試使用map方法之前的數組。

if (myStructure instanceof Array) { 
    myStructure.map((val, idx, []) => { }); 
} 

你也可以使用MyStructure稍微不同的定義,例如解決您的問題:

type MyStructure = any[] | any; 

還是窄:

class Test { 
    foo: string; 
} 

type MyStructure = Test[] | Test; 
+0

我實際上_.isArray這樣做( ),這當然在TypeScript中不起作用...感謝您的幫助! – kraftwer1

+1

@索尼,你知道爲什麼這個作品'鍵入MyStructure = number [] |號碼;'[Playground](https://www.typescriptlang.org/play/index.html#src=%0D%0Atype%20MyStructure%20%3D%20number%5B%5D%20%7C%20number%3B% 0D 0A%%0D%0Alet%20myStructure%3A%20MyStructure%20%3D%20%5B3%5D%3B%0D 0A%%0D%0AmyStructure.map(N%20%3D%3E%20N * 2)%3B %0D%0AmyStructure%20%3D%205%3B)? –

+0

這只是「對象」,會導致你的問題。參見另外兩個使用'any'或者(可能更有用)示例的例子,它使用一個類來定義你在map方法中使用的任何東西(然後你會在你用來映射的函數中獲得更好的類型信息)。 – Fenton

相關問題