TypeScript字面量类型与字符串的自动补全实现方案咨询
实现支持自动补全且允许任意字符串的TypeScript类型
这个需求完全可行,你之前的写法失效是因为string是所有字符串字面量的父类型,当你把字面量和string直接联合时,TypeScript会把整个类型简化成string,自然就没了自动补全提示。
正确的实现方式是用string & {}替代单纯的string,和字面量类型联合:
export type StateWords = 'first' | 'second' | 'third' | (string & {});
这样写的好处是:
- IDE会自动提示
'first'、'second'、'third'这几个预设值 - 同时允许输入任意自定义字符串,不会触发类型错误
举个使用例子:
// 能触发自动补全 const presetWord: StateWords = 'first'; // 自定义字符串也合法 const customWord: StateWords = 'my-custom-word';
原理是string & {}是一个特殊的字符串类型,它本质上还是字符串,但因为和空对象做了交叉操作,TypeScript不会把它和普通string合并,从而保留了字面量类型的补全提示,同时又兼容任意字符串输入。
如果需要复用预设的字面量集合,也可以拆分定义:
type PresetWords = 'first' | 'second' | 'third'; export type StateWords = PresetWords | (string & {});
内容的提问来源于stack exchange,提问作者Алексей Ганин
相关产品推荐
相关产品推荐

