function argAsType(Type: any) {
return class A {
n: Type;
};
}
报错提示: “Type”表示值,但在此处用作类型。是否指“类型 Type”?
我传入的Type 是一个class类 ,然后里面想要这样指定类型
这个可以做到么
有什么好的方式?
也许你想要搜索的是 泛型 <T>?
如果在学习 TS 的话,可以考虑一下通过这个项目来学习 type-challenges: Collection of TypeScript type challenges with online judge
可以这样试试
function argAsType<T>(Type: T) {
return class A {
n: T;
constructor(n: T) {
this.n = n
}
};
}
argAsType<number>(1) // 指定为数字
argAsType<string>('1') // 指定为字符串
function argAsType<T>(arg: T) {
return class A { n!: T; };
}
const A = argAsType(123), a = new A()
a.n // number
在TypeScript中,当你试图使用一个变量(如Type
)作为类型注解时,你会遇到一个问题,因为TypeScript的类型系统是基于静态类型的,而变量是动态的,它们的值在运行时可以改变。因此,你不能直接将一个变量用作类型。
但是,你可以使用泛型或类型参数(type parameters)来实现类似的功能。泛型允许你在定义函数、接口或类时定义类型参数,并在函数、接口或类的其他地方使用这个类型参数。
下面是一个使用泛型的例子,它可能符合你的需求:
function argAsType<Type>() {
return class A {
n: Type;
};
}
// 使用方式
const MyType = argAsType<number>();
const instance = new MyType();
instance.n = 123; // 正确
instance.n = "hello"; // 错误: 类型“"hello"”的参数不能赋给类型“number”的参数
但是,这里有个问题:Type
在泛型参数中是一个占位符,它并不是你在函数外部定义的一个具体的类。如果你想要根据传入的类来创建一个新的类,并且这个新类有一个属性其类型是传入的类的实例类型,那么你需要使用typeof
关键字结合泛型参数:
function createClassWithTypedProperty<T>() {
return class A {
n: T;
constructor(n: T) {
this.n = n;
}
};
}
// 使用方式
class MyClass {
value: string;
}
const MyTypedClass = createClassWithTypedProperty<MyClass>();
const instance = new MyTypedClass(new MyClass());
instance.n = new MyClass(); // 正确
instance.n = 123; // 错误: 类型“123”的参数不能赋给类型“MyClass”的参数
在这个例子中,T
是一个泛型参数,它代表了你想要使用的类型。然后你可以使用MyTypedClass
类来创建实例,并且这个实例的n
属性将是MyClass
的实例类型。
总结一下,你不能直接将一个变量用作类型,但你可以使用泛型或类型参数来在函数、接口或类中定义类型占位符,并在需要的地方使用这个占位符。如果你想要根据传入的类来创建一个新的类,你可以使用typeof
关键字结合泛型参数来实现。
本文向大家介绍不能做switch()的参数类型是:相关面试题,主要包含被问及不能做switch()的参数类型是:时的应答技巧和注意事项,需要的朋友参考一下 switch 的参数不能为实型。
请问,为何不能这样运行ts文件呢? 文件util.ts: 文件:__test__/util.test.ts 然后我在执行: 的时候,报错: 请问,这个报错的原因是什么呢? 我已经在 文件:__test__/util.test.ts 添加了导出啊:
class类可以完成的事情,我们使用普通的function以及变量定义也能完成,所以很多情况下,我们都是使用后者来完成业务,class用的地方不多,但class有它自己的属性、方法,可以加默认值,它也可以继承,在项目中,有哪些地方是我们可以合理利用class方法的?class主要是用来干什么的?
定义参数化类时,只能使用固定数量的参数。 但是,如果你想创建一个包含多个值的地图。必须使用映射
html请求代码是这样的,用post请求,键的名字叫name controller的代码是这样的,因为是传json,我有加@RequestBody 实体类的代码,也是取name,getter setter也有实现
您好,请问下,我有一个字符串,如何用这个字符串作为JSX来使用呢? 请问如何基于str这个字符串变量做到<AppComp/>? 更新1 因为其他地方已经定义了AppComp,所以直接引入,但是在这进行字符串创建JSX名称使用。