為什么不接受委托?
partnerAndDeliveryData2![key1] = {};
該方法的第一個引數key1 應該是“partnerData”或“deliveryData”。但似乎方法簽名者實作并沒有限制它,而是初始化一個陣列?!
import React, { useEffect, useState, Fragment } from "react";
export type SetPartnerAndDeliveryDataIn = {
partnerData?: NameAndAddress;
deliveryData?: NameAndAddress;
businessUseApproval?: boolean;
email?: string;
error?: string;
};
export type NameAndAddress = {
name?: string;
phoneNumber?: string;
country?: string;
postalCode?: string;
city?: string;
address?: string;
taxCode?: string;
};
export default function PartnerAndDeliveryForm(props: {}) {
const [partnerAndDeliveryData, setPartnerAndDeliveryData] =
useState<SetPartnerAndDeliveryDataIn>({
partnerData: {
country: "Magyarország",
},
});
const setData = (
key1: ["partnerData", "deliveryData"],
value: string
) => {
let partnerAndDeliveryData2 = {
...partnerAndDeliveryData,
};
partnerAndDeliveryData2![key1] = {};
}
}
最小可重現示例
uj5u.com熱心網友回復:
如果您希望key1引數的型別是 the"partnerData"或"deliveryData"字串字面量型別,那么您希望它是這些型別的并集,通過|運算子表示:
key1: "partnerData" | "deliveryData" // union of string literals
您當前的代碼錯誤地使用了元組型別,它對應于長度為 2 的陣列,其第一個元素是"partnerData",第二個元素是"deliveryData"。這不是你想要的:
key1: ["partnerData", "deliveryData"] // array of length 2
如果您key1從元組更改為聯合,事情應該開始變得更有意義:
partnerAndDeliveryData2[key1] = {}; // okay
Playground 代碼鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436891.html
標籤:打字稿
