Wie initiiert man eine neue Klasse in TS auf diese Weise (Beispiel in C#, um zu zeigen, was ich will):
// ... some code before
return new MyClass { Field1 = "ASD", Field2 = "QWE" };
// ... some code after
Wie initiiert man eine neue Klasse in TS auf diese Weise (Beispiel in C#, um zu zeigen, was ich will):
// ... some code before
return new MyClass { Field1 = "ASD", Field2 = "QWE" };
// ... some code after
type ExcludeMethods<T> = Pick<T, { [K in keyof T]: T[K] extends Function ? never : K }[keyof T]>;
class MyClass {
public name!: string;
public age!: number;
public optional?: boolean;
private yep: string = "";
constructor(props: ExcludeMethods<typeof MyClass.prototype>) {
Object.assign(this, props);
}
public method() {
}
}
const thing = new MyClass({
name: "bob",
age: 15
});
type ExcludeMethods<T> = Pick<T, { [K in keyof T]: T[K] extends Function ? never : K }[keyof T]>;
class Person{
name: string = "N/A";
age: number = 0;
gender?: "male" | "female"
constructor(init?:ExcludeMethods<Person>){
Object.assign(this, init);
}
Describe(){return `${this.name} ${this.age} ${this.gender ?? ""}` }
}
var p1 = new Person();
var p2 = new Person({
name: "John",
age: 20
});
var p3 = new Person({
name: "Mary",
age: 25,
gender: "female"
});
console.log(p1.Describe()) // N/A 0
console.log(p2.Describe()) // John 20
console.log(p3.Describe()) // Mary 25 female
Die beste Antwort ist die rev7 von OP. Hier ist diese Revision .=======================================================
Als ich diese Frage schrieb, war ich reiner .NET-Entwickler ohne viel JS-Wissen. Auch TypeScript war etwas völlig Neues, angekündigt als neue C#-basierte Obermenge von JavaScript. Heute sehe ich, wie dumm diese Frage war.
Falls jemand immer noch nach einer Antwort sucht, sehen Sie sich bitte die möglichen Lösungen unten an.
Zunächst ist zu beachten, dass wir in TS keine leeren Klassen für Modelle erstellen sollten. Besser ist es, eine Schnittstelle oder einen Typ zu erstellen (je nach Bedarf). Guter Artikel von Todd Motto: https://ultimatecourses.com/blog/classes-vs-interfaces-in-typescript
LÖSUNG 1:
type MyType = { prop1: string, prop2: string };
return <MyType> { prop1: '', prop2: '' };
LÖSUNG 2:
type MyType = { prop1: string, prop2: string };
return { prop1: '', prop2: '' } as MyType;
LÖSUNG 3 (wenn Sie wirklich eine Klasse brauchen):
class MyClass {
constructor(public data: { prop1: string, prop2: string }) {}
}
// ...
return new MyClass({ prop1: '', prop2: '' });
oder
class MyClass {
constructor(public prop1: string, public prop2: string) {}
}
// ...
return new MyClass('', '');
Natürlich müssen Sie in beiden Fällen die Casting-Typen nicht manuell auflösen, da sie vom Rückgabetyp der Funktion/Methode aufgelöst werden.
Wenn Sie eine neue Instanz erstellen wollen, ohne den Anfangswert zu setzen, wenn die Instanz
1- Sie müssen eine Klasse und keine Schnittstelle verwenden
2- Sie müssen den Anfangswert bei der Erstellung der Klasse festlegen
export class IStudentDTO {
Id: number = 0;
Name: string = '';
student: IStudentDTO = new IStudentDTO();
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.