在TypeScript中,我经常需要一个对象具有某种类型,因为推断的类型不会产生所需的结果--这种情况发生在具有基类的类型层次结构中,或者当中间体用于存储值时。
我一直在使用“as”,但它不是类型安全的,例如,给定:
interface SomeType {
some: integer
}
然后:
{ some: 123 } as SomeType // this passes
{ wrong: "abc" } as SomeType // but this also passes
如果我给一个变量赋值,我可以得到我想要的:
const a : SomeType = { wrong: "abc" } // fails as desired
但在某些情况下,使用变量是不方便的。* 有没有一种等效的方法可以将类型安全强制转换为表达式?*
对于我的使用,我添加了一个简单的函数,似乎可以工作:
export function safeAs<T>(value: T): T {
return value
}
然后:
safeAs<SomeType>({ some: 123 }) // this passes
safeAs<SomeType>({ wrong: "abc" }) // this fails, as wanted
但它感觉这是一个基本的需求,我假设我错过了一些已经可以做到这一点的语法。
注意:我需要在TSX(react)文件中使用它,我知道它有时会影响泛型/类型语法。
1条答案
按热度按时间fnx2tebb1#
TS版本4.9通过引入
satisfies
运算符解决了这个问题。Playground
参见new Typescript "satisfies" operator