TypeScript如何实现函数参数既支持固定字符串提示又允许任意字符串输入
实现方案
你可以通过「预设字符串字面量联合 + 空对象交叉的string类型」的方式实现需求,既保留所有预设值的IntelliSense自动提示,又支持传入任意自定义字符串,无需用户额外做类型断言。
代码示例
// 定义预设值,支持上百个预设字符串不影响提示效果 type PresetOption = "A" | "B" | (string & {}) function create(options: PresetOption){ // 函数内部业务逻辑 } // 所有调用均合法无类型错误 create("A") // 输入时会自动提示A、B预设值 create("B") create("C") // 自定义字符串无报错
原理解释
如果直接写"A" | "B" | string,TypeScript会自动将整个类型合并收敛为普通string类型,会丢失所有预设字面量的自动提示能力。
而string & {}本质上仍属于string类型,不会限制任意字符串的传入,同时因为它是衍生的交叉类型,TypeScript不会把整个联合类型合并为普通string,因此可以完整保留预设字面量的提示效果。
如果你的预设值是数字类型,同理可以用number & {}实现同样的效果。
内容的提问来源于stack exchange,提问作者Ujjwal Kumar Gupta
相关产品推荐
相关产品推荐

