Неопределенные объекты с помощью Map (). Get () в Typescript - PullRequest
0 голосов
/ 27 декабря 2018

Итак, у меня есть 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>
})

что-то, что переменная делает его лучше для оценки.

1 Ответ

0 голосов
/ 29 декабря 2018

Попытка использовать троичные операторы усложняет задачу, она работает лучше, присваивая переменную, возвращаемую this._$customerUser.get():

productObject.userIds.map(user => {
    if (this._$customerUsers) {
        var singleUser = this._$customerUsers.get(user)
        if (singleUser === undefined) {<span>N/A</span>}
        else {
            return <span key={user}>{singleUser.username}</span>
        }
    }
    return <span>N/A</span>
})
...