面试题答案
一键面试// 定义错误类型
class UserDataFormatError extends Error {
constructor(message: string) {
super(message);
this.name = 'UserDataFormatError';
}
}
// 断言函数
function assertUserDataFormat(data: any): asserts data is { id: number; name: string; age: number } {
if (
typeof data === 'object' &&
'id' in data &&
typeof data.id === 'number' &&
'name' in data &&
typeof data.name ==='string' &&
'age' in data &&
typeof data.age === 'number'
) {
return;
}
throw new UserDataFormatError('用户数据格式不正确');
}
// 模拟异步获取用户数据的函数
function fetchUserData(): Promise<{ id: number; name: string; age: number }> {
return new Promise((resolve, reject) => {
// 模拟异步操作,这里用setTimeout代替真实异步
setTimeout(() => {
const mockData = { id: 1, name: 'John', age: 30 }; // 假设这是获取到的数据
try {
assertUserDataFormat(mockData);
resolve(mockData);
} catch (error) {
if (error instanceof UserDataFormatError) {
console.error('错误信息:', error.message);
}
reject(error);
}
}, 1000);
});
}
你可以这样调用fetchUserData
函数:
fetchUserData()
.then(data => {
console.log('用户数据:', data);
})
.catch(error => {
console.error('获取用户数据时出错:', error);
});