type Person = {
[P in string]: any;
};
type Student = {
grade: number;
};
type t0 = Student extends Person ? true : false;
type t1 = (() => Student) extends () => Person ? true : false;
type t2 = ((v: Student) => void) extends (v: Person) => void ? true : false;
t0为真,t1为真,但t2为假。
为什么t2是假的?
1条答案
按热度按时间6jjcrrmo1#
在您的示例中,
Student
比Person
更严格。因此,将返回
true
,但是返回
false
编辑:
更详细地说,如果你有一个对象:
你可以说这个学生也是一个
Person
,因为number
(年级)扩展了any
,而grade
满足[P in string]
。Typescript显示true
-Student
扩展了Person
。示例中的
t1
返回Student
。任何返回Student
的函数都可以声明返回Person
(基于上面的解释)。t2
是不同的,因为你 * 接受 * 一个Student
的参数。如果一个函数接受一个Student
,它不一定接受一个Person
。所以如果你翻转它-它会工作(接受一个Person
的函数肯定会接受一个更严格的Student
),但反之亦然