gpt4 book ai didi

javascript - Typescript 中泛型类中 Type 的默认值

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:34 24 4
gpt4 key购买 nike

我需要根据变量在 Typescript 泛型类中的类型设置默认值,如下所示

  class MyClass<T>{
myvariable: T // Here I want to set the value of this variable
// with the default value of the type passed in 'T'
}

例如,如果 T 是数字,那么变量 myvariable 的默认值应该是“0”,同样对于字符串,它应该是空字符串等等。

最佳答案

您不能这样做,因为 T 的实际类型只会在运行时才知道。

你可以做什么:

abstract class MyClass<T> {
myvariable: T;

constructor() {
this.myvariable = this.getInitialValue();
}

protected abstract getInitialValue(): T;
}

现在你只需扩展这个类,就像这样:

class MyStringClass extends MyClass<string> {
protected getInitialValue(): string {
return "init-value";
}
}

编辑

您要求的无法完成,因为 T 仅存在于 typescript 领域,并且它不会在编译过程中“存活”。

例如,这个:

class MyClass<T> {
myvariable: T;

constructor(value: T) {
this.myvariable = value;
}
}

编译成:

var MyClass = (function () {
function MyClass(value) {
this.myvariable = value;
}
return MyClass;
}());

如您所见,在编译版本中没有 T,因此您不能在运行时使用该信息来生成默认值。


另一种解决方案是使用默认值映射:

var defaultValues = {
"string": "",
"number": 0,
"boolean": false
}

class MyClass<T> {
myvariable: T;

constructor(value: T) {
this.myvariable = value;
}
}

let a = new MyClass<string>(defaultValues.string);
let b = new MyClass<boolean>(defaultValues.boolean);

你也可以使用静态工厂方法:

class MyClass<T> {
myvariable: T;

constructor(value: T) {
this.myvariable = value;
}

static stringInstance(): MyClass<string> {
return new MyClass<string>("");
}

static numberInstance(): MyClass<number> {
return new MyClass<number>(0);
}

static booleanInstance(): MyClass<boolean> {
return new MyClass<boolean>(false);
}
}

let a = MyClass.stringInstance();
let b = MyClass.booleanInstance();

关于javascript - Typescript 中泛型类中 Type 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com