错误是currEmot可能未定义。我很困惑为什么会发生这种情况,因为for循环保证循环通过表情对象并将对象添加到地图中。
let emotionsObject = [
{
size: 80,
background: 'rgb(67, 0, 128)',
width: .5,
emoji: "😄",
name: 'joy'
},
{
size: 34,
background: 'rgb(0, 45, 172)',
width: .35,
emoji: "😭",
name: 'sadness',
},
{
size: 50,
background: 'rgb(172, 6, 0)',
width: .15,
emoji: "😡",
name: 'anger',
},
];
type T_Emotion = typeof emotionsObject[0]
let currEmot = new Map<string, T_Emotion>(null!);
let emotOrder: string[] = [];
for (let i = 0; i < emotionsObject.length; i++) {
let id = uuid_v4();
emotOrder.push(id)
currEmot.set(id, emotionsObject[I]);
}
emotOrder.sort((a: string, b: string):number => currEmot.get(b).width - currEmot.get(a).width);
我已经尝试过这些其他版本来防止这个错误。
emotOrder.sort((a: string, b: string):number => currEmot?.get(b)?.width - currEmot?.get(a)?.width);
emotOrder.sort((a: string, b: string):number => currEmot.get(b).width as number - currEmot.get(a).width as number);
使用bang运算符!
告诉typescript不会出现找不到对象的情况
currEmot.get(b)!.width - currEmot.get(a)!.width
您需要创建Interface
并将其设置为您的对象
interface IEmotions {
size: number
background: string
width: number
emoji: string
name: string
}
请记住,如果任何key
可能未定义,则需要将?
添加到key
中,例如:size?: number
let emotionsObject: (IEmotions | undefined)[] = [
{
size: 80,
background: 'rgb(67, 0, 128)',
width: .5,
emoji: "😄",
name: 'joy'
},
{
size: 34,
background: 'rgb(0, 45, 172)',
width: .35,
emoji: "😭",
name: 'sadness',
}
];