我正在使用對打字稿做出反應,我有這個:
interface SomeProps {
stuff: {
optionalStuff?: object[];
}[];
}
這種方法的唯一問題是,如果我嘗試在 . 之外插入任何屬性optionalStuff,stuff object[]它將失敗,因為這些屬性未列出。
我該怎么做:
interface SomeProps {
stuff: {
ACCEPTS_ANY_GENERIC_STUFF_INSIDE: string | number | object | undefined
optionalStuff?: object[];
}[];
}
uj5u.com熱心網友回復:
您可以使SomeProps通用,因此您可以指定其他可選欄位將stuff接受。在下面的示例中,stuff除了optionalStuff也需要foo欄位。
type SomeProps<T> = {
stuff: ({
optionalStuff?: object[];
} & T)[];
}
const arr: SomeProps<{ foo: string }> = {
stuff: [{
optionalStuff: [],
foo: 'abc'
}]
}
打字稿游樂場
uj5u.com熱心網友回復:
前面的答案是正確的,但是如果您事先不知道或者物件的型別stuff只共享optionalStuff陣列而不共享其他鍵,您可以使用索引簽名。
interface SomeProps {
stuff: {
optionalStuff?: object[];
[key: string]: string | number | object | undefined;
}[];
}
然后您可以進行型別檢查,optionalStuff但可以使用任何其他屬性擴展物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533289.html
上一篇:如何找到地圖元素的正確型別?
下一篇:以編程方式確定html背景顏色
