如何使用typeof操作符获取新创建对象的实际类型而非声明类型?
能否用TypeScript的typeof获取对象实际类型而非声明类型?
不能直接通过显式标注类型后的变量用typeof拿到实际字面量类型——因为你给变量option显式指定了Options类型,TypeScript会把该变量的类型固定为Options,此时typeof option返回的就是声明的Options,而非对象字面量的精确类型。
要获取对象的实际类型,有两种可行方案:
1. 移除显式类型标注,用satisfies约束类型(推荐)
如果需要确保对象符合Options的结构要求,但又想保留实际字面量的精确类型,可以用satisfies关键字替代显式类型标注:
type Options = { a?: boolean b?: boolean c?: boolean } // 用satisfies确保对象符合Options的约束,同时让TS自动推断精确类型 const option = { a: true, b: true } satisfies Options; // typeof返回实际类型:{ a: boolean; b: boolean } type OptionExactType = typeof option;
2. 完全依赖TypeScript的自动类型推断
如果不需要提前约束对象类型,直接省略类型标注,TypeScript会自动推断出对象字面量的精确类型:
const option = { a: true, b: true }; // typeof返回{ a: boolean; b: boolean } type OptionExactType = typeof option;
注意:如果已经给变量显式指定了类型(比如const option: Options = {...}),TypeScript会忽略字面量的实际结构,将变量类型锁定为声明的Options,此时无法通过typeof获取实际字面量类型。
内容的提问来源于stack exchange,提问作者Fiisa
相关产品推荐
相关产品推荐

