我理解类型文本使用结构类型(鸭子类型),所以下面的代码是有效的
interface Teacher {
age: number
salary: number
}
interface Student {
age: number
classes: string
}
type Person = Teacher | Student
function getAge(person: Person) {
return person.age
}
getAge({age: 34, salary: 1000}) // ok
getAge({age: 16, classes: '5-4'}) // ok
getAge({age: 20, salary: 1000, classes: '5-4'}) // Should be error but type checker success
如何编写函数签名以防止getAge({age: 20, salary: 1000, classes: '5-4'})
发布于 2022-07-02 01:58:43
看看在打字记录文档中受到歧视的工会。
https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions
这样,您的代码应该如下所示:
interface Teacher {
kind: 'teacher';
age: number;
salary: number;
}
interface Student {
kind: 'student';
age: number;
classes: string;
}
type Person = Teacher | Student;
function getAge(person: Person) {
return person.age;
}
getAge({ kind:"teacher", age: 34, salary: 1000 }); // ok
getAge({ kind: "student", age: 16, classes: '5-4' }); // ok
getAge({ kind: "teacher", age: 20, salary: 1000, classes: '5-4' }); // now throws error
https://stackoverflow.com/questions/72835839
复制相似问题