无法打印Json对象属性

时间:2018-11-02 00:58:02

标签: javascript crash object-properties

我可以在控制台日志中看到字符串化的对象探测,但是在打印它们时出现错误。以下控制台日志可以正常工作,并且可以在控制台日志中看到所有属性,但是如果我打印元数据,则我的应用程序将崩溃。我的对象属性在控制台日志中如下所示。 type RequestType = | 'foo' | 'bar' | 'baz' interface SomeRequest { id: string type: RequestType sessionId: string bucket: string params: Array<any> } type ResponseResult = string | number | boolean const ERROR_INTERFACE_DUMMY = Symbol(); interface Type_parameter_T_is_required { [ERROR_INTERFACE_DUMMY]: never; } interface Do_not_mess_with_this_type_parameter { [ERROR_INTERFACE_DUMMY]: never; } type IfDefinitelyNever<X, A, B, G extends Do_not_mess_with_this_type_parameter> = ("good" | G) extends {[P in keyof X]: "good"}[keyof X] ? B : ([X] extends [never] ? A : B); async function sendWorkRequest<T extends ResponseResult = never, G extends Do_not_mess_with_this_type_parameter = never>( type: RequestType & IfDefinitelyNever<T, Type_parameter_T_is_required, unknown, G>, ...params ): Promise<T> { await this.readyDeferred.promise const request: SomeRequest = { id: 'abc', bucket: 'bucket', type, sessionId: 'some session id', params: [1,'two',3], } const p = new Promise<T>(() => {}) this.requests[request.id] = p this.worker.postMessage(request) return p } // DOESN'T WORK async function test1() { // Error: Argument of type '"foo"' is not assignable to parameter of type // '("foo" & Type_parameter_T_is_required) | // ("bar" & Type_parameter_T_is_required) | // ("baz" & Type_parameter_T_is_required)'. const result = await sendWorkRequest('foo') result.split('') } test1() // WORKS async function test2() { const result = await sendWorkRequest<string>('foo') result.split('') } test2() // ALSO WORKS async function test3<U extends ResponseResult>() { const result = await sendWorkRequest<U>('foo') } test3()

{"Full_name":"John Abraham","Age":"26","Location":"Antwerpen"}

1 个答案:

答案 0 :(得分:0)

就我而言,我的对象在第一次发推尝试中未定义,这就是为什么我得到未定义错误的原因。在第三次尝试中,我得到了完整的对象,但是meta.Age不允许我的应用程序达到这一点。尝试过

var Age;
if (typeof metadata != "undefined") {
      Age = metadata.Age;
}