Итак, у меня есть userObject
с атрибутами
public userId: string
public displayName: string
public username: string
и productObject
с атрибутами
public productId: string
public userIds: string[] | null
Я делаю это:
private _$customerUsers: Map<string, UserObject> | undefined = undefined
private _onUsers = (bundle: DataBundleObject<UserObject>) => {
this._$customerUsers = new Map()
for (let customerUser of bundle.listOfData) {
this._$customerUsers.set(customerUser.userId, customerUser)
}
}
Я хотел бы сделать что-то вроде
productObject.userIds.map(user => {<span>this._$customerUsers.get(user).username</span>})
, которое я не могу запустить, поскольку VScode говорит мне Object is possibly 'undefined'
, поэтому я попробовал троичные операторы:
this._$customerUsers ? this._$customerUsers.get(user) ? this._$customerUsers.get(user).username
, но он все еще говоритпоследний может быть undefined
.Как это возможно?Второе троичное выражение должно проверить, является ли возвращаемый объект undefined
.
Обновление
Странно, я могу сделать
productObject.userIds.map(user => {
if (this._$customerUsers) {
var userO = this._$customerUsers.get(user)
if (userO === undefined) {<Tag color='red'>N/A</Tag>}
else {
<Tag color="blue" key={user}>{userO.username}</Tag>
}
}
<Tag color='red'>N/A</Tag>
})
но не
productObject.userIds.map(user => {
if (this._$customerUsers) {
if (this._$customerUsers.get(user) === undefined) {<Tag color='red'>N/A</Tag>}
else {
<Tag color="blue" key={user}>{this._$customerUsers.get(user).username}</Tag>
}
}
<Tag color='red'>N/A</Tag>
})
что-то, что переменная делает его лучше для оценки.