如果這很直接,我很抱歉,我是 Typescript 的新手。我遇到了一個錯誤,其中“型別 '{ params: { slug: any; }; }' 的引數不能分配給型別為 'string' 的引數。
我已將資料型別定義為pathsDatawith:const pathsData : string[] = [];但不確定為什么我會收到該錯誤?
export async function getStaticPaths( slug: Array<string>,) {
const { data } = await client.query({
query: GET_PAGES_URI,
})
const pathsData : string[] = [];
data?.pages?.nodes && data?.pages?.nodes.map( page => {
if (! isEmpty( page?.uri )) {
const slugs = page?.uri?.split("/").filter( pageSlug => pageSlug );
pathsData.push({ params: { slug: slugs } }) <--- Error occurs on this line
}
})
return {
paths: pathsData,
fallback: true,
}
}
我預計結果將被物體看起來像這樣:{ params: {slug: ['foo', 'bar'] } }。所以我假設我將字串陣列設定為 pathsData 是不正確的。
任何幫助是極大的贊賞
uj5u.com熱心網友回復:
錯誤是讓您知道{params: {slug: any}}無法將資料結構添加到字串陣列中。您已經告訴 typescript 'pathsData' 是一個字串陣列,因此它會期望添加一個字串。'slug' 是 'any' 的原因是因為您const slugs沒有定義資料型別。
在打字稿中,型別必須匹配。所以字串陣列被限制為只有字串。相反,物件陣列不能有字串。嘗試類似的東西const pathsData: {path: string}[] = []然后pathsData.push('somePath')你會得到一個類似的錯誤。Tyepscript 通過你給它們的型別來限制變數。
你可以改變const pathsData: any[] = [];,你不會得到錯誤。現在您告訴打字稿“pathsData 陣列可以添加任何資料型別”。現在您的陣列可能看起來像[1, "name", true, {"name": "value"}]:類似于您可能在 Javascript 中創建的陣列。雖然在某些情況下使用 'any' 很有用,并且可以消除您的錯誤,但它違背了提供型別的目的。也就是說,如果您將所有內容都指定為“任何”型別,那么您最好只使用 Javascript。
最好的辦法是為您的變數提供預期的型別。如果您將字串推送到陣列,那么pathsData: string[]如果您想要物件,那么pathsData: {}[].
編輯:我明白你特別要求什么。你會想要一個帶有 'params' 屬性的物件。然后 'params' 將是一個具有 'slug' 屬性的物件,其中 'slug' 是一個字串陣列。那么你需要做myObj.params.slug.push('my strings'). 但我試圖了解您希望如何獲得您正在尋找的資料結構。
uj5u.com熱心網友回復:
您正在嘗試將物件推送到字串陣列中,您可以使用以下語法:
pathsData : any[] = [];
因此,不推薦使用 any 型別,您應該始終嘗試鍵入您的變數。但它會成功。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340942.html
標籤:打字稿
上一篇:如何從函式的回傳中獲取型別?
下一篇:將字串轉換為盲文
