[英]TypeScript Type 'Record<string, string>' is not assignable to type 'string'
為什么這是錯誤的? 我遇到過類似的問題,但從未弄清楚。 每當我這樣做時:
type dataType = {
[key: string]: string | Record<string, string>;
};
const rawData = [
{
name: 'XXXX',
commission: 'XXXX',
psc: 'XXX XX',
ico: 'XXXXXXXX',
address: 'XXXXXXX',
city: 'XXXXXXXXXXX',
},
];
const createData = ({ name, commission, ico, address, psc, city }: dataType) => {
return { name, commission, legal: { name, ico, address, city: `${psc} ${city}` } };
};
const rows: dataType[] = [createData(rawData[0])];
這在理論上應該可以正常工作,不是嗎? dataType 是 object 的類型,任何鍵是字符串,值為字符串或另一個 object。為什么這不起作用?
您的createData
不應將數據類型dataType
作為其參數。 你寫的方式, name
, ico
和address
可能是Record<string, string>
類型,到達簽名
const createData: ({ name, commission, ico, address, psc, city }: dataType) => {
name: string | Record<string, string>;
commission: string | Record<string, string>;
legal: {
name: string | Record<string, string>;
ico: string | Record<...>;
address: string | Record<...>;
city: string;
};
}
當您嘗試將結果分配給數據類型變量時, legal
的dataType
中的這些記錄無效。
相反,使用
const createData = ({ name, commission, ico, address, psc, city }: Record<string, string>) => …
這是適合您的rawData
的正確類型。 (您可能想要更精確並定義具有確切屬性的接口)。
原因名稱可以是string | Record<string,string>
string | Record<string,string>
,所以返回類型中的legal.name可以是string | Record<string,string>
string | Record<string,string>
表示合法的類型應該是Record<string, string | Record<string,string>>;
Record<string, string | Record<string,string>>;
但是,你定義的createData的返回類型是dataType ,這意味着合法的類型不能覆蓋你返回的真實類型。 您定義的引導周期,嘗試為您的 function 編寫另一個返回類型。
就個人而言,我不建議你這樣寫 type。
type DataType = {
name: string,
commission: string,
psc: string,
ico: string,
address: string,
city: string,
};
type AnotherDataType = {
name: string,
commission: string,
legal: Partial<DataType>
}
可能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.