2017-10-31 2 views
0

Ich versuche, eine Typoskript Datei zu kompilieren und es hält diesen Fehler vom Compiler zu werfen: error TS2339: Property 'payload' does not exist on type 'string | object'. Property 'payload' does not exist on type 'string'.jsonwebtoken Typescript Problem beim Kompilieren?

-Code in Frage:

decode(token: string): any { 
    const decodedJWT = jwt.decode(token, { complete: true }); 

    const issuer = decodedJWT.payload.iss; 
          ^^^^^^^^^ 
    return {}; 
} 

ich die @types/jsonwebtoken Bibliothek bin die Typen zu definieren. Jede Hilfe würde sehr geschätzt werden.

+0

Welchen Typ gibt 'jwt.decode' zurück? – Legends

Antwort

1

Dieser Fehler wird durch Typoskript Typprüfung verursacht wird, ist der Rückgabetyp von jwt.decode()null | object | string, wenn Sie sicher sind, jwt.decode() immer ein Objekt zurückgibt, können Sie decodedJWT-any Typ werfen diesen Fehler zu vermeiden:

decode(token: string): any { 
    const decodedJWT = jwt.decode(token, { complete: true }); 

    const issuer = (decodedJWT as any).payload.iss; 
    return {}; 
} 

im obigen Beispiel könnte es Ausnahme zur Laufzeit führen, da jwt.decode()null oder einen String zurückgeben könnte, aber nur ein object enthält Eigenschaft payload, so dass Sie lieber den Rückgabewert in einer sichereren Art und Weise handhaben:

decode(token: string): any { 
    const decodedJWT = jwt.decode(token, { complete: true }); 

    if (decodedJWT === null) { 
     // deal with null 
    } else if (typeof decodedJWT === 'string') { 
     // deal with string 
    } else { 
     const issuer = (decodedJWT as any).payload.iss; // cast to `any` type 
    } 

    return {}; 
} 
Verwandte Themen