Typescript:为什么“asknown as x”有效

Ste*_*iss 45 typescript

我有data它的类型是ItemDTO. 我想将它传递给一个接受类型参数的函数Item

Typescript 抱怨这可能是一个错误,因为这两种类型没有充分重叠,并且如果有意转换为unknown第一种类型。

为什么这有效?unknown将类型转换为第一个有效的类型是什么?

另一种说法是:

function foo(arg: Item){}
const data: ItemDTO = {key: 123}
const results = foo(data as Item) // this doesn't work
const alternative = foo((data as unknown) as Item) // this works
Run Code Online (Sandbox Code Playgroud)

bas*_*rat 81

基本

A as B如果A可以分配给BORB可以分配给 则A有效。

你的情况

data as Itemdata仅当可以分配给ItemItem可以分配给data时才有效。因为这不是真的,所以data as Item是一个错误。

data as unknown之所以有效,是因为任何东西都可以分配给unknown,因此也data可以分配给unknown。=> 1

unknown as Item之所以有效,是因为任何东西都可以分配给unknown,因此也Item可以分配给unknown。=> 2

data as unknown as Item有效,因为 1 && 2 是允许的。

更多的

这称为双重断言。

参考

  • 我有时确实会使用它,但想知道这是否是好的做法?请问您对此有何看法,谢谢! (3认同)