我在初始化类属性时遇到麻烦。 我有这样的打字稿代码。
export class myClass {
a: number;
b: number;
public getCopy(anotherClass: myClass): myClass {
return {
a: anotherClass.a,
b: anotherClass.b
};
}
}
但是我收到此错误消息。
类型'{{a:number;缺少属性'getCopy' b:数字; }'但 “ myClass”类型中必需
为什么认为getCopy()是一个属性? 我有C#背景并且C#不需要初始化函数。 有没有一种方法可以创建类实例并初始化属性而不初始化函数? 我正在寻找一种更简单的方法,例如下面的C#代码。
var newInstance = new myClass()
{
a = 1,
b = 2
};
不要这样做。
var newInstance = new myClass();
newInstance.a = 1;
newInstance.b = 2;
或者打字稿不可能吗?
答案 0 :(得分:1)
创建myClass类的新克隆实例:
public getCopy(anotherClass: myClass): myClass {
return Object.assign(new myClass(), {...});
}
答案 1 :(得分:1)
getCopy
是的myClass属性。您将其声明为myClass的属性。 myClass
的实例也可以使用对象符号编写:
const myClassInstance = {
a,
b,
getCopy,
}
由于getCopy
在myClass
上不是可选的,因此您必须具有此属性,并且该属性必须与myClass
代数的类型匹配,因此它必须是一个函数。
所有这些,对我来说还不是很清楚,为什么需要一个创建该类副本的实例方法。您可以将其作为独立功能代替。克隆对象的顶层还可以通过几种其他方式完成,包括散布运算符,因此通常也不需要编写自己的函数即可。
const myClass = new myClass();
myClass.a = 1
myClass.b = 2;
const myClassCopy = { ...myClass };
答案 2 :(得分:0)
我真的认为您不需要为所提供的代码提供一个类,只需在接口中描述您的数据结构,例如
interface DataStructure {
a: number;
b: string;
}
,然后创建一个具有以下属性的对象,例如:
const instance: DataStructure = { a: 5, b: 'test' };
然后可以将接口以及参数用作函数或返回值。它不必是类,例如:
function someFunction( b: DataStructure): void {
}
someFunction(instance); // works
someFunction({a: 10, b: 'test'}); // works
someFunction({a: 10}); // doesn't work, b is required