
前端UI组件【免费下载链接】intl-tel-inputFor entering, formatting, and validating international telephone numbers. Available in vanilla JavaScript, or as React, Vue, Angular, and Svelte components.项目地址https://gitcode.com/gh_mirrors/in/intl-tel-input点击查看免费下载intl-tel-input的公开类型与常量对象是调用getNumber、getNumberType、getValidationError等方法以及配置placeholderNumberType、allowedNumberTypes等选项时的共同语言。本文以 types.md 为骨架逐一定义四个字符串联合类型与Country数据结构的每个取值并结合仓库源码constants.ts、public-api.ts、data.ts说明这些类型的底层来源与真实使用场景。读完本文你将能够读懂intl-tel-input的任意方法返回值与错误码写出类型安全、拼写零失误的集成代码。一、为什么需要一份类型参考页intl-tel-input的公开 API 大量使用字符串字面量作为枚举值方法返回它们、选项接收它们、事件回调传出它们。为了让这些值在文档中只出现一次、避免各处重复叙述核心库把它们集中定义在 types.md 这一页方法文档methods.md、选项文档options.md与组件文档都通过链接指向这里。在源码层面这些字符串联合类型并非手写而是从常量数组派生而来。看 public-api.tsexport type ArrayValuesT extends readonly unknown[] T[number]; export type NumberFormat ArrayValuestypeof NUMBER_FORMATS; export type NumberType ArrayValuestypeof NUMBER_TYPES; export type ValidationError ArrayValuestypeof VALIDATION_ERRORS;也就是说每个类型都是对应常量数组元素值的联合数组是唯一事实来源single source of truth不会出现类型声明与运行时校验各写一份导致的不同步问题。二、NumberFormat号码输出格式NumberFormat是传给getNumber的格式参数决定以何种方式返回当前号码共四种取值E164—— 国际格式、无任何分隔符默认值例如17024181234。INTERNATIONAL—— 国际格式、带空格分隔例如1 702-418-1234。NATIONAL—— 国内格式、带空格分隔例如(702) 418-1234。RFC3966—— RFC 3966 规范的tel:URI例如tel:1-702-418-1234。底层定义位于 constants.tsexport const NUMBER_FORMATS [ E164, INTERNATIONAL, NATIONAL, RFC3966, ] as const;注释明确说明该数组镜像了 libphonenumber 中的i18n.phonenumbers.PhoneNumberFormat枚举且数组索引即 libphonenumber 使用的整数取值——这是它同时被核心库与utils.js构建期由脚本生成 int 映射引用的基础。典型用法const number iti.getNumber(); // 默认 E164如 17024181234 const number iti.getNumber(INTERNATIONAL); // 1 702-418-1234 const number iti.getNumber(NATIONAL); // (702) 418-1234需要注意两点getNumber与numberDisplayFormat选项相互独立前者总是返回你显式请求的格式不受输入框显示格式影响详见 methods.md。E.164 规范不包含分机号按 ITU-T E.164 规范1 702 418 1234 ext. 789转成 E.164 后是17024181234而INTERNATIONAL、NATIONAL、RFC3966三种格式会保留分机号。想单独取分机号用getExtension。实际项目中最常见的落地场景是以 E.164 格式存储与恢复号码见 best_practices.md由于拨号代码已内嵌在号码中如17024181234无需再单独保存国家字段恢复时把 E.164 号码作为初始值传入核心库会自动识别国家并格式化。三、NumberType号码类型NumberType描述一个电话号码的种类由getNumberType返回并被placeholderNumberType与allowedNumberTypes两个选项使用。共十二种取值FIXED_LINE—— 固定电话座机。MOBILE—— 手机 / 移动电话。FIXED_LINE_OR_MOBILE—— 无法区分的固定/移动类型见下方注意。TOLL_FREE—— 免费电话如1 800…。PREMIUM_RATE—— 高费率号码。SHARED_COST—— 分摊费用号码。VOIP—— VoIP 网络电话。PERSONAL_NUMBER—— 个人号码。PAGER—— 寻呼机号码。UAN—— 通用接入号码。VOICEMAIL—— 语音信箱接入号码。UNKNOWN—— 无法判定类型。底层定义在 constants.ts同样镜像 libphonenumber 的PhoneNumberType枚举数组索引即 libphonenumber 的整数值——唯一的例外是UNKNOWNlibphonenumber 将其映射为-1在utils.js中显式处理。注意一固定与移动不可分的情况。在某些国家如美国没有可靠手段区分固定电话与移动号码此时 libphonenumber 返回FIXED_LINE_OR_MOBILE。因此若你要校验是不是手机号必须同时判断MOBILE与FIXED_LINE_OR_MOBILE两个值。这在 methods.md 中给出了完整示例const numberType iti.getNumberType(); if (numberType MOBILE || numberType FIXED_LINE_OR_MOBILE) { // 是或可能是手机号 }注意二占位符示例号的覆盖范围。当NumberType用于placeholderNumberType选项时并非每个国家、每种类型都有示例号码——libphonenumber 没有示例时占位符会为空。官方强烈建议只使用MOBILE默认值、FIXED_LINE、FIXED_LINE_OR_MOBILE三者因为只有这三种类型几乎每个国家都有示例号。例如PAGER只有约 9% 的国家有示例号设置后大部分国家占位符会是空的。NumberType还直接参与校验策略allowedNumberTypes选项默认值为[MOBILE, FIXED_LINE]这意味着默认情况下isValidNumber只对这两种类型的号码返回true。设置成null表示不限制类型但不推荐因为isValidNumber基于号码长度判断而某些类型的合法长度很短——例如挪威的手机与座机号为 8 位默认唯一合法长度但挪威 UAN 号码只有 5 位一旦allowedNumberTypes设为null5–8 位的号码都会通过校验。四、ValidationError校验错误码ValidationError由getValidationError返回也通过框架组件的onChangeErrorCode/errorCodeChange回调传出详见 react_component.md、vue_component.md、angular_component.md、svelte_component.md。共六种取值INVALID_COUNTRY_CODE—— 未选择任何国家或拨号代码与任何国家都不匹配。TOO_SHORT—— 号码短于该国家的最小长度。TOO_LONG—— 号码超出该国家的最大长度。INVALID_LENGTH—— 长度在其他方面无效。IS_POSSIBLE_LOCAL_ONLY—— 长度仅匹配该国家的本地区域内号码。本库的校验方法将其视为无效因为这种号码无法从其他地方拨入。IS_POSSIBLE—— 号码长度正确但仍可能因更严格的原因而无效例如被isValidNumberPrecise拒绝或不符合你的allowedNumberTypes设置。底层定义在 constants.ts镜像 libphonenumber 的PhoneNumberUtil.ValidationResult枚举export const VALIDATION_ERRORS [ IS_POSSIBLE, INVALID_COUNTRY_CODE, TOO_SHORT, TOO_LONG, IS_POSSIBLE_LOCAL_ONLY, INVALID_LENGTH, ] as const;校验的典型工作流是先用isValidNumber判断是否有效该方法基于长度判断各国号码规则更新频繁但长度很少变动因此更面向未来返回false时再用getValidationError获取具体原因最后把错误码映射为用户可见的提示文案。官方在 best_practices.md 中给出了完整的getErrorMessage工作示例const getErrorMessage (number, errorCode) { if (!number) return Please enter a number; const { VALIDATION_ERROR } intlTelInput; switch (errorCode) { case VALIDATION_ERROR.INVALID_COUNTRY_CODE: return Invalid dial code; case VALIDATION_ERROR.TOO_SHORT: return Too short; case VALIDATION_ERROR.TOO_LONG: return Too long; default: return Invalid number; } };注意这个示例通过intlTelInput.VALIDATION_ERROR常量对象访问错误码而不是直接写字符串字面量——这正是常量对象存在的意义见第六节。utils.js还提供了独立的静态版utils.getValidationError可直接针对号码与国家判断例如intlTelInput.utils.getValidationError(702, us)返回TOO_SHORT详见 utils.md。五、Country国家数据结构Country是核心库内部数据中每个国家的形态由静态方法getAllCountries获取全部国家可用于生成自定义国家选择器或在初始化前修改数据和实例方法getSelectedCountry获取当前选中国家未选择时返回null即地球/空状态返回。其类型定义位于 data.tsexport type Country { name: string; // populated in the core library iso2: Iso2; dialCode: string; priority: number; areaCodes: readonly string[] | null; nationalPrefix: string | null; };各属性含义namestring本地化的国家名称如Afghanistan。仅在核心库初始化之后才被填充——在 data.ts 的初始化循环中原始数据行的国家名字段被置为空字符串初始化时才会写入本地化名称。iso2string两位 ISO 3166-1 alpha-2 国家代码。dialCodestring国际拨号代码不含前导如93。prioritynumber多个国家共享同一拨号代码时的排序优先级——数值越小越靠前例如1中美国为0、加拿大为1。areaCodesstring[] | null用于区分共享同一拨号代码的国家如 NANP 北美号码计划的区号列表没有则为null。nationalPrefixstring | null国内长途呼叫时的前缀中继前缀如英国的0没有则为null。Country是从紧凑的原始数据行重构而来的rawCountryData中每行是一个定长元组如[zw, 263, 0, null, 0]初始化循环按索引取出并映射为带命名键的对象data.ts。同时该文件还导出了iso2Set与isIso2类型守卫供全库共享的 ISO2 校验使用。使用示例const countries intlTelInput.getAllCountries(); // Country[] const country iti.getSelectedCountry(); // Country | null console.log(country.name, country.dialCode);需要留意getAllCountries返回的数组是核心库内部的数据引用任何修改都必须发生在初始化核心库之前详见 methods.md。六、常量对象拼写安全的枚举访问intlTelInput.NUMBER_FORMAT、intlTelInput.NUMBER_TYPE、intlTelInput.VALIDATION_ERROR、intlTelInput.PLACEHOLDER_POLICY和intlTelInput.COUNTRY_SELECTOR_MODE是五个常量对象其值恰好就是上面各字符串联合的字面值——例如intlTelInput.VALIDATION_ERROR.TOO_SHORT TOO_SHORT。它们用于获得拼写安全的属性访问例如作为查找表的键——尤其是在纯 JavaScript 环境中字符串字面量没有编译期类型检查写错一个字母只会静默出错。从源码看这五个常量对象由toEnumObject从数组统一派生不存在需要手工同步的第二份清单constants.tsconst toEnumObject T extends readonly string[](arr: T): Readonly{ [K in T[number]]: K } Object.fromEntries(arr.map((v) [v, v])) as Readonly{ [K in T[number]]: K }; export const NUMBER_FORMAT toEnumObject(NUMBER_FORMATS); export const NUMBER_TYPE toEnumObject(NUMBER_TYPES); export const VALIDATION_ERROR toEnumObject(VALIDATION_ERRORS); export const COUNTRY_SELECTOR_MODE toEnumObject(COUNTRY_SELECTOR_MODES);其中PLACEHOLDER_POLICY比较特殊——没有对应的并行数组作为唯一事实来源因此是手工定义的取值有AGGRESSIVE、POLITE、OFFconstants.tsCOUNTRY_SELECTOR_MODE则另有取值OFF、DROPDOWN、FULLSCREEN、AUTO。关键实现细节这些常量对象不仅作为 ES 模块的具名导出存在还会被挂载到intlTelInput工厂函数对象上让不使用 ES import 的script标签消费者也能直接写window.intlTelInput.VALIDATION_ERROR.TOO_SHORT等表达式见 intlTelInput.ts 与 intlTelInput.ts。在 TypeScript 中这些常量对象还参与类型推导类型别名NumberFormat ArrayValuestypeof NUMBER_FORMATS等位于 public-api.ts构建时通过dts-bundle-generator提升到 dist 声明文件的顶层消费者无需手动 import 即可使用。几个官方推荐的使用场景// 传给 getNumber / 与其他方法返回值比较 iti.getNumber(intlTelInput.NUMBER_FORMAT.INTERNATIONAL); numberType intlTelInput.NUMBER_TYPE.MOBILE; // 配置 allowedNumberTypes 选项 allowedNumberTypes: [intlTelInput.NUMBER_TYPE.MOBILE, intlTelInput.NUMBER_TYPE.FIXED_LINE] // 作为查找表的键typ safe 的核心价值 const errorMessages { [intlTelInput.VALIDATION_ERROR.TOO_SHORT]: 号码太短, [intlTelInput.VALIDATION_ERROR.TOO_LONG]: 号码太长, [intlTelInput.VALIDATION_ERROR.INVALID_COUNTRY_CODE]: 无效的国家代码, };七、类型之间的协作关系这几个类型并不是孤立存在的它们在intl-tel-input的日常使用中形成一条完整的链路展示placeholderNumberType类型NumberType决定输入框占位符用哪种类型的示例号numberDisplayFormat类型为排除RFC3966后的NumberFormat见 public-api.ts决定输入框内号码的显示格式。校验isValidNumber/isValidNumberPrecise依据allowedNumberTypesNumberType[] | null判断有效性与最大长度失败后由getValidationError返回ValidationError再映射为用户文案。数据getAllCountries/getSelectedCountry返回Country[]/Country | null用于自定义 UI、回显国家与号码。整个类型体系的设计原则是字符串字面量 派生常量对象 类型别名三位一体字符串是运行时值常量对象保证拼写安全类型别名提供编译期约束——三层都从同一组数组派生天然保持一致。这对纯 JavaScript 与 TypeScript 用户都是透明的也让 types.md 这份参考页成为阅读 methods.md、options.md 及四个框架组件文档react_component.md、vue_component.md、angular_component.md、svelte_component.md时随时查阅的公共知识库。赞分享前端UI组件【免费下载链接】intl-tel-inputFor entering, formatting, and validating international telephone numbers. Available in vanilla JavaScript, or as React, Vue, Angular, and Svelte components.项目地址https://gitcode.com/gh_mirrors/in/intl-tel-input点击查看免费下载相关推荐如何快速搭建Jaeger UI5分钟上手分布式追踪可视化平台如何快速搭建Jaeger UI5分钟上手分布式追踪可视化平台 Jaeger UI是一款功能强大的分布式追踪可视化平台专为开发人员和运维团队设计帮助轻松监控CANN/asc-devkit asc_transto5hd数据格式转换asc_transto5hd 产品支持情况 |产品|是否支持| | : | : : | | term Atlas A3 训练系列产品/Atlas A3 推理系人工智能深度学习算子库CANNAscendintl-tel-input动态表单生成JSON Schema与intl-tel-inputintl tel input动态表单生成JSON Schema与intl tel input 在现代Web应用开发中动态表单生成是提升开发效率和用户体验的关前端UI组件上一篇24B参数多模态大模型Magistral 1.2本地化部署改写企业AI规则下一篇终极指南为什么srez项目的L1损失函数能加速图像超分辨率收敛创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考