我正在使用 jasonwebtoken 包。我发现了这个新的javascript/typescript行为。
interface JwtPayload {
[key: string]: any;
iss?: string | undefined;
sub?: string | undefined;
aud?: string | string[] | undefined;
exp?: number | undefined;
nbf?: number | undefined;
iat?: number | undefined;
jti?: string | undefined;
}
let payload: JwtPayload | string
let id: string | undefined
id = payload.sub
在作业中我得到了错误。这是怎么回事?
Type 'string | (() => string) | undefined' is not assignable to type 'string | undefined'.
Type '() => string' is not assignable to type 'string'.(2322)
TSPlayground
1条答案
按热度按时间euoag5mw1#
您已经将
payload
声明为JwtPayload
* 或 * 字符串:这意味着
payload.sub
既可以表示JwtPayload
的sub
属性 *,也可以表示string
的sub
属性 *。原来字符串上的
sub
存在:它是String.prototype.sub()
方法,它的类型是() => string
,所以它不是凭空而来的.要将
payload.sub
赋值给id
,需要确保payload
不是字符串:这样,编译器就可以安全地确定它是
JwtPayload
,这意味着payload.sub
具有所需的类型。您也可以Assert
payload
具有您假定的类型,但这只是意味着告诉编译器不要再谈论类型安全,这意味着您需要祈祷它不会在运行时给予错误。