【发布时间】:2019-04-25 18:35:25
【问题描述】:
在下面的代码中,我希望 TypeScript 应该能够意识到,在注释行中,user 对象不能有任何其他值 role 期望 admin。
确实如此!如果将此代码粘贴到 TypeScript Playground 中,您会注意到此时将鼠标悬停在 role 上确实只显示 admin!
但是,return DemoForAdmin 行仍然显示错误。并且将鼠标悬停在 user 那里,显示类型的弹出窗口会显示 role 字段的完整联合。
function Demo(user: { name: string; role: 'user' | 'admin'; } | null) {
if (user === null) {
return 'You have to be logged in.';
}
if (user.role !== 'admin') {
return 'You have to be an admin';
}
user.role; // Hover over role to see "admin"
return DemoForAdmin(user);
}
function DemoForAdmin(user: { name: string; role: 'admin'; }) {
return 'You are an admin';
}
TypeScript 不应该能够意识到将对象传递给该方法是安全的(是吗?还有role,不只是role?
【问题讨论】:
标签: typescript