为什么 Typescript 不需要我缩小这个未知数

问题描述 投票:0回答:1

我总是将“未知”视为“不确定”类型,如果我想用它做任何事情,应该缩小类型。

但在这种情况下,它的行为并不符合我的预期。这不会出错:

abstract class Foo<T> {

  abstract doth(input: T): void;

}

function checkAndDo(foo: Foo<unknown>) {

    const someRandomBS = 'afafaf';
    foo.doth(someRandomBS);

}

我如何输入

checkAndDo
foo
参数来捕捉这个想法:“我知道它是 Foo,但我不知道泛型类型参数是什么”

typescript
1个回答
0
投票

T
中的
Foo
参数处于逆变位置。如果您不知道
doth
接受什么输入,则应该使用
never
,这意味着您无法调用该方法。这对应于对协变位置中的类型使用
unknown
,您不知道可访问值的类型(例如对象属性或函数结果)并且无法使用它。

如果您使用

Foo<unknown>
,则需要一个可以接受任何值(未知类型)的
doth
实现。

© www.soinside.com 2019 - 2024. All rights reserved.