【发布时间】:2020-07-26 04:08:08
【问题描述】:
这里我有一个名为 body 的变量,它稍后会接收一些数据,现在它被分配为 null:
const body: {
"name": string,
"photo": {
"fileName": string,
"file": NodeJS.ReadableStream,
"encoding": string,
"mimetype": string,
"sizeInBytes": number,
"publicUrl": string
},
"token": string
} = null;
但后来当我收到数据并尝试像这样放置数据时:
body[someVariable] = someVariable;
它编译时没有错误,但是当我运行 js 文件时,它给了我这样的错误:
Uncaught TypeError: Cannot set property 'fieldName1' of undefined
我在互联网上搜索,发现一个对象必须像 {} 空对象一样初始化才能在其中进一步添加属性,但如果我做类似的事情,例如:body = {} typescript error ays values are missing,我是无法将这些值设为可选
【问题讨论】:
-
解决方法
(body as object) = {}; -
你可以改用
const body = {} as {"name": string, ...etc... }。请注意,如果您不能将属性设为可选,那么理想情况下,您应该使用已经设置好的属性来初始化对象。为什么不能将属性设为可选? -
因为值来自网络服务,如果不是来自服务,我会手动输入其中一些值
-
那为什么不
const body: {...} = Object.assign(objWithDefaultValues, valueFromService); -
因为数据来自不同的结构并且数据很大,我只需要其中的几个,所以我从 web 服务响应中提取我需要的数据并像这样放入我的对象中:
body[serviceRes.fieldName] = serviceRes.value跨度>
标签: node.js typescript interface typescript-typings