簡體   English   中英

打字稿array.map丟失返回類型

[英]typescript array.map lost returned type

我可能會在以下代碼中遇到類型錯誤,但是對於打字稿來說完全可以,您能告訴我為什么嗎?

export interface Structure {
    aaa: string;
}

export function f1(): Structure[] {  // OK for typescript, not for me
    const result = [].map(certState => {
        return {
            aaa: 'aaa',
            ADDITIONAL_FIELD: 'asdf'
        }
    });

    return result;
}

export function f2(): Structure[] { // ERROR for typescript (and for me)
        return [
            {
                aaa: 'sdf',
                ADDITIONAL_FIELD: 'asdf'
            }
        ]
    }

鏈接在這里

謝謝!

該錯誤是由於您在f2()中直接返回結果這一事實造成的。

如果將f2()更改為

export function f2(): Structure[] {
    const returnVal = [
        {
            aaa: 'sdf',
            ADDITIONAL_FIELD: 'asdf'
        }
    ]

    return returnVal;
}

那么就不會有編譯器錯誤。

TypeScript使用結構化類型確定類型兼容性,因此在f1()代碼中, result為類型

{
   aaa: string,
   ADDITIONAL_FIELD: string
}[]

Structure[]兼容(類型變窄沒有危險)。

我不確定100%為什么直接返回不起作用,但是我的假設是在f2()您告訴編譯器“此特定數組的類型為Structure[] ”,並且說不,不是。 當您在f1()有一個中間變量時,您將說“此函數返回Structure[] ”,而當您返回中間變量時,編譯器將檢查並說“好的resultStructure[]匹配”,因此此函數將按照其說明進行操作。

我很想知道其他人是否有更嚴格的解釋

我只是了解到Typescript具有僅用於對象文字的精確類型的概念,因此f1不使用對象文字,因此無法添加其他屬性,並且對typescript有效。 f2使用對象文字,因此不允許使用其他屬性。 這讓我很害怕,但這就是打字稿的工作方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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