能否在类中使用this关键字实现字段的条件类型定义?
在类内部使用this做条件类型定义的问题及解决方案
你遇到的问题核心在于:类中直接使用this['multiple']时,TypeScript会将multiple的类型视为固定的boolean,而不是一个可以区分的具体布尔值。boolean extends true显然不成立,所以条件类型会直接判定为false,最终ids的类型被解析为string。
要实现根据multiple的值动态确定ids的类型,需要通过泛型类来实现,让TypeScript能够跟踪multiple的具体布尔类型:
import { Input, booleanAttribute } from '@angular/core'; export class BfpComponent<T extends boolean = false> { @Input() public ids?: T extends true ? string[] : string; @Input({ transform: booleanAttribute }) public multiple!: T; }
说明:
- 泛型参数
T限定为boolean类型,默认值设为false,对应multiple的默认行为。 - 当你给组件传入
[multiple]="true"时,TypeScript会自动推断T为true,此时ids的类型会变成string[];传入false时,ids类型为string。 multiple后的!是非空断言,因为Angular的@Input会在组件初始化阶段赋值,不会出现未定义的情况。
使用示例:
<!-- ids会被类型检查为string[] --> <bfp-component [multiple]="true" [ids]="['id1', 'id2']"></bfp-component> <!-- ids会被类型检查为string --> <bfp-component [multiple]="false" [ids]="'id1'"></bfp-component>
内容的提问来源于stack exchange,提问作者dexter
相关产品推荐
相关产品推荐

