簡體   English   中英

TypeScript 類型'記錄<string, string> ' 不可分配給類型 'string'</string,>

[英]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作為其參數。 你寫的方式, nameicoaddress可能是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;
    };
}

當您嘗試將結果分配給數據類型變量時, legaldataType中的這些記錄無效。

相反,使用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM