如何解决打字稿:对联合类型字段的约束
我创建了一个联合类型的对象。它们都有一个字段 role
来区分它们。
这里有老师和学生:
type User =
{
role: "student";
followClasses: string[];
} |
{
role: "teacher";
since: number;
};
const defaultStudent = (): User => ({
role: "student",followClasses: [],});
但是由于返回类型是联合类型User,打字稿不知道它是学生,并且抛出当我输入此内容时,我会发出警告:
const student = defaultStudent();
console.log(student.followClasses);
// Warning here ⮥
如何使函数defaultStudent
具有约束返回类型(学生)?
解决方法
将联合的两个成员提取为单独的类型
type Student = {
role: "student"
followClasses: string[]
}
type Teacher = {
role: "teacher"
since: number
}
并直接从它们定义您的联合
type User = Student | Teacher
此时,您可以说您的 defaultStudent
函数不只是返回一个 User
,您可以比这更精确。它返回一个 Student
。
const defaultStudent = (): Student => ({
role: "student",followClasses: [],})
const student = defaultStudent()
console.log(student.followClasses) // <-- OK
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。