亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

理解 NodeJs 打字稿函數體

理解 NodeJs 打字稿函數體

冉冉說 2023-04-01 15:56:56
我試圖了解以下代碼的作用export const extractSomeDto = ({    _id,    name,    status}: SomeDto): SomeDto =>transformAttributes<SomeDto>({    _id,    name,    status});函數調用是這樣的——extractSomeDto(JSON.parse(body))我可以弄清楚以下內容-導出方法extractSomeDto供其他文件調用該方法將返回: SomeDto我有以下疑問 -extractSomeDto 的輸入是什么?是SomeDto還是_id, name, status?該方法extractSomeDto將調用另一個名為的方法transformAttributes,我可以看到_id, name, status作為參數傳遞,但我不明白這<SomeDto>部分
查看完整描述

2 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

讓我們分解一下:


export

    export const extractSomeDto = ({ _id, name, status }: SomeDto): SomeDto =>

//  ^^^^^^

      transformAttributes<SomeDto>({ _id, name, status });

導出方法extractSomeDto供其他文件調用

你是對的,它將從當前模塊導出。


小更正,這是一個功能,而不是一個方法。方法屬于對象——你總是稱它們為something.someMethod(). 函數沒有與之關聯的對象,因此它們本質上是“自由浮動”的,您可以將它們稱為someFunction().


輸入參數

export const extractSomeDto = ({ _id, name, status }: SomeDto): SomeDto =>

//                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    transformAttributes<SomeDto>({ _id, name, status });

此函數采用的參數是 類型SomeDto,但是屬性_id、name和status將被解構。手冊文檔顯示了一個變量聲明,但它也可以用于參數。


本質上,它只是從輸入中獲取這三個屬性的值,并將它們分配給同名的變量。這比做input._id, input.name, 和更容易input.status。


返回類型

export const extractSomeDto = ({ _id, name, status }: SomeDto): SomeDto =>

//                                                              ^^^^^^^

    transformAttributes<SomeDto>({ _id, name, status });

該方法將返回: SomeDto

你又是對的——返回類型SomeDto又是。(提醒它是一個函數,而不是一個方法)。


因此,輸入和輸出是同一類型的對象。


通用函數調用

export const extractSomeDto = ({ _id, name, status }: SomeDto): SomeDto =>

    transformAttributes<SomeDto>({ _id, name, status });

//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

該函數將調用一個名為的通用函數transformAttributes。該函數的簽名必須類似于通用類型參數function <T>transformAttributes()在哪里。T在您的例子中,類型參數是SomeDto. 函數的確切決定取決于實現,盡管它是其中之一


參數類型,例如,function <T>transformAttributes(input: T)

返回類型,例如,function <T>transformAttributes(): T

輸入和返回類型function <T>transformAttributes(input: T): T

輸入參數為transformAttributes()

export const extractSomeDto = ({ _id, name, status }: SomeDto): SomeDto =>

    transformAttributes<SomeDto>({ _id, name, status });

//                               ^^^^^^^^^^^^^^^^^^^^^

這是對象屬性的簡寫語法。它相當于{ _id: _id, name: name, status: status  }. 換句話說,它從這三個變量創建屬性,其中每個名稱是變量的名稱,值是變量的值。


transformAttributes和的返回值extractSomeDto

最后,快速提一下——因為代碼使用的是箭頭函數,并且正文沒有包含在大括號中,{}所以隱式地返回值就是正文返回的任何值。這意味著返回調用時extractSomeDto的結果。transformAttributes<SomeDto>({ _id, name, status })


查看完整回答
反對 回復 2023-04-01
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

函數名稱:extractSomeDto


功能參數:{_id,name,status}: SomeDtoan。這意味著該函數接受一個 SomeDtoan 類型的對象并將其解構以提取以下字段:_id、名稱、狀態。


函數返回類型:SomeDto


函數體:函數返回結果


transformAttributes<SomeDto>({

    _id,

    name,

    status

});

這是相同的功能,重寫后更容易理解。


export const extractSomeDto = (inputObject: SomeDto): SomeDto => {

   const _id = inputObject._id;

   const name = inputObject.name;

   const status = inputObject.status;


   return transformAttributes<SomeDto>({_id, name, status});

}


查看完整回答
反對 回復 2023-04-01
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號