You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何内联强类型字面量作为函数参数并做全类型检查

解决方案

你可以通过两种方式实现内联对象字面量的严格类型检查,同时避免代码臃肿:

方法一:泛型辅助函数

定义一个仅做类型约束的泛型函数,利用TypeScript对函数参数的严格字面量检查特性:

const assertType = <T>(value: T): T => value;

在push调用中用这个函数包裹对象字面量:

const shapes: Shape[] = [];

shapes.push(assertType<Circle>({ name: 'Circle', radius: 12 }));
shapes.push(assertType<Rectangle>({ name: 'Rectangle', width: 34, height: 56 }));

// 缺少height属性时会触发编译错误
shapes.push(assertType<Rectangle>({ name: 'Rectangle', width: 34 }));

原理

as Type属于类型断言,TypeScript会默认信任你对类型的判断,允许属性缺失的断言;而泛型函数的参数会触发严格检查,强制对象字面量完全匹配目标类型的所有必填属性。


方法二:satisfies关键字(TypeScript 4.9+)

无需额外定义函数,直接用satisfies确保对象结构符合目标类型,再断言为Shape存入数组:

const shapes: Shape[] = [];

shapes.push({ name: 'Circle', radius: 12 } satisfies Circle as Shape);
shapes.push({ name: 'Rectangle', width: 34, height: 56 } satisfies Rectangle as Shape);

// 同样会触发编译错误
shapes.push({ name: 'Rectangle', width: 34 } satisfies Rectangle as Shape);

原理

satisfies的作用是验证对象字面量与目标类型的结构匹配,但不会改变其原始类型,因此需要补充as Shape的断言以适配数组的类型要求。

内容的提问来源于stack exchange,提问作者samanthaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:35:17