簡體   English   中英

函數的多個類型的返回值上不存在屬性

[英]Property does not exist on a function's return value of multiple types

我正在使用typescript來編寫NodeJS程序。

在這個程序中,我導入了一個名為ts-md5的節點模塊,其中有一個函數hashStr() ,它可以返回一個stringInt32Array的值。

我需要在我的程序中做這樣的事情:

Md5.hashStr(str).toUpperCase();

但是,編譯器抱怨錯誤:

error TS2339: Property 'toUpperCase' does not exist on type 'string | Int32Array'.

該程序成功運行。 因為它總是在運行時返回string 但我想知道是否有辦法擺脫這個惱人的錯誤?

您可以使用類型保護或類型斷言。

打字衛士

let hash = Md5.hashStr(str);
if (typeof hash === 'string') {
    hash = hash.toUpperCase();
}

類型斷言

let hash = (<string>Md5.hashStr(str)).toUpperCase();

該型后衛的好處是,它在技術上更加安全-因為如果你做過得到的東西,這不是在運行時的字符串,它仍然能工作。 類型斷言只是覆蓋編譯器,因此它在技術上並不安全,但它完全被擦除,因此導致您遇到錯誤時的運行代碼相同。

hashStr ts-md5 hashStr聲明

static hashStr(str: string, raw?: boolean): string | Int32Array;

看看實現 ,似乎當raw為true時返回Int32Array ,否則返回string

鑒於該聲明,您不能比使用類型斷言做得更好:

let hash = (Md5.hashStr(str) as string).toUpperCase()

表達返回類型的正確方法取決於TypeScript中的參數是通過重載聲明 這樣的事情應該有效:

static hashStr(str: string): string;
static hashStr(str: string, raw: false): string;
static hashStr(str: string, raw: true): Int32Array;
static hashStr(str: string, raw: boolean): Int32Array | string;
static hashStr(str: string, raw?: boolean): string | Int32Array {
    // implementation goes here...
}

我建議在ts-md5上發布一個關於此的問題。

暫無
暫無

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

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