在 TypeScript 泛型方法中将变量转换为 T?

Moh*_*yan 2 type-conversion typescript

我有以下typescript课程,从中获取模型localStorage

export class LocalStorageHelper {
    public static GetItemValue<T>(key: string): T {
        let value: string = localStorage.getItem(key);
        // if(typeof T == 'string') return value;
        // return (Convert JSON.parse(value) To T)
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 TypeScript 中做类似注释行的事情?

edd*_*P23 6

TypeScript get 已编译为 JS,因此运行时没有类型,因此您不能执行像typeof T这里这样的操作。您需要以某种方式传递要返回的对象的类型。在你的情况下,我将有两种单独的方法,一种用于检索字符串,另一种用于将其解析为 JSON。

export class LocalStorageHelper {
    public static GetItemValueString(key: string): string {
        let value: string = localStorage.getItem(key);
        return value;
    }
    public static GetItemValue<T>(key: string): T {
        let value: string = localStorage.getItem(key);
        return JSON.parse(value) as T;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还要指出的是,即使在强类型语言(如 Java/Scala/C#)中,编译器也没有任何方式告诉您是否想要返回字符串或另一个对象,因为 T 只是您用来返回的返回类型确定返回什么。