TypeScript中无入参返回T|undefined的函数如何返回字符串值
错误原因
你定义的Vap<T>是泛型类,泛型参数T由类实例化时传入的类型决定,你在get_value方法内直接将固定字符串"some str"赋值给声明为T | undefined类型的变量,TypeScript无法保证所有场景下T都兼容字符串类型,因此抛出TS2322错误。
同时你提供的抽象类代码存在语法错误,get_value方法后多写了一个左括号,也需要修正。
解决方案
方案1:固定Vap类的返回类型为字符串
如果该子类仅用来返回字符串类型值,继承父类时直接指定泛型为string即可:
export abstract class NVap<T> { // 修正原语法错误,删除多余的左括号 abstract get_value(): T | undefined; } // 继承时指定父类泛型为string export class Vap extends NVap<string> { get_value(): string | undefined { let TAa: string | undefined; TAa = "some str"; return TAa; } } let task = new Vap(); task.get_value(); // 正常返回 "some str"
方案2:保留泛型灵活性,动态传入返回值
如果需要Vap支持返回多种类型的值,不要写死返回值,通过构造函数传入对应类型的参数:
export abstract class NVap<T> { abstract get_value(): T | undefined; } export class Vap<T> extends NVap<T> { constructor(private value?: T) { super(); } get_value(): T | undefined { return this.value; } } // 实例化时指定泛型为string,传入字符串参数 let task = new Vap<string>("some str"); task.get_value(); // 正常返回 "some str"
方案3:给泛型增加字符串类型约束
如果要求泛型参数只能是字符串相关类型,可以给T加extends string约束:
export abstract class NVap<T> { abstract get_value(): T | undefined; } // 给泛型T增加字符串类型约束 export class Vap<T extends string> extends NVap<T> { get_value(): T | undefined { return "some str" as T; } } let task = new Vap(); task.get_value(); // 正常返回 "some str"
内容的提问来源于stack exchange,提问作者rpjs
相关产品推荐
相关产品推荐

