我总是将“未知”视为“不确定”类型,如果我想用它做任何事情,应该缩小类型。
但在这种情况下,它的行为并不符合我的预期。这不会出错:
abstract class Foo<T> {
abstract doth(input: T): void;
}
function checkAndDo(foo: Foo<unknown>) {
const someRandomBS = 'afafaf';
foo.doth(someRandomBS);
}
我如何输入
checkAndDo
的 foo
参数来捕捉这个想法:“我知道它是 Foo,但我不知道泛型类型参数是什么”
T
中的Foo
参数处于逆变位置。如果您不知道 doth
接受什么输入,则应该使用 never
,这意味着您无法调用该方法。这对应于对协变位置中的类型使用 unknown
,您不知道可访问值的类型(例如对象属性或函数结果)并且无法使用它。
如果您使用
Foo<unknown>
,则需要一个可以接受任何值(未知类型)的 doth
实现。