如何在不使用变量的情况下静态检查表达式的类型?

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

假设我有一些函数,其参数未键入(或者至少对于我的用例来说没有足够明确的类型)和一些我自己定义的接口

// f is some function from a JS library
const f = (x: any) => console.log(x);

interface SpecificObject {
    a: string;
    b: string;
}

我们可以这样做:

const tmpVar: SpecificObject = {a: ""};
f(tmpVar);

编译器正确地给出了错误,因为它静态地发现我们的文字中缺少键

b

但这会创建一个不必要的临时变量

tmpVar
。如何在不使用额外变量的情况下获得相同的类型检查行为?

我已经尝试过:

f({a: ""} as SpecificObject);

但这并不会给出错误。看起来

as
更像是一种强制类型断言,而不是像上面的变量类型那样进行检查。

typescript
1个回答
0
投票

您可以使用

satisfies
运算符,有点像类型安全的
as
。它不会不安全地缩小之前表达式的类型(尽管它提供了一个可能会影响其推断类型的context),因此如果它不满足相关类型,您将收到警告:

f({ a: "" } satisfies SpecificObject); // error!
//          ~~~~~~~~~
//   Property 'b' is missing in type '{ a: string; }'

f({ a: "", b: "" } satisfies SpecificObject); // okay

Playground 代码链接

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