클래스 속성을 설정하기 위해 여러 줄의 코드를 작성할 필요가 없도록 TypeScript에서 MyClass에 여러 속성을 동적으로 할당하고 싶습니다. 나는 오류가있는 라인 this[key] = value;
에 문제가있다,TypeScript에서 클래스 속성에 동적으로 값을 할당하는 방법
interface IMy
{
visible?: boolean;
text?: string;
}
class MyClass
{
element: JQuery;
assing(o: IMy): void
{
for (let [key, value] of Object.entries(o))
{
if (typeof value !== "undefined")
this[key] = value;
}
}
get visible(): boolean
{
return this.element.is(":visible");
}
set visible(visible: boolean)
{
this.element.css("display", visible ? "" : "none");
}
get text(): string
{
return this.element.html();
}
set text(text: string)
{
this.element.html(text);
}
}
let t = new MyClass();
t.assign({ visible: true });
//instead t.visible = true;
//or
t.assign({ text: "Something" });
//instead t.text = "something";
//or
t.assign({ text: "Something", visible: false });
//instead t.visible = true;
// t.text = "something";
:하지만 나는 다음과 같은 코드를 작성
Index signature of object type implicitly has an 'any' type.
내가 변경할 필요가 또는 나의 접근 방식은 완전히 잘못입니까?
인터페이스가 생성자 매개 변수 일 때 생성자에서 기본 속성을 설정하는 좋은 해결책이 될 수도 있습니다. 정말 그들이 내가이 코드를 사용하고 좋아하는 항목에 대한
:
//extensions.d.ts
interface Object
{
entries<T>(o: any): [string, T][];
entries(o: any): [string, any][];
}
//exntesion.js !!note js not ts
if (!Object.entries)
{
Object.entries = function* entries(obj)
{
for (let key of Object.keys(obj))
{
yield [key, obj[key]];
}
};
}
편집 2 :
편집은
주요 아이디어는 생성자 곳 과부하 문제를 해결하는 것이 었습니다 원하는 속성 만 설정할 수 있습니다.
다른 사람이 사용할 수 있다고 판단되면 완전한 코드가 표시됩니다.
interface IMy
{
prop1?: boolean;
prop2?: string;
prop3?: string;
prop4?: number;
}
class MyClass implements IMy
{
prop1: boolean = false;
prop2: string = "";
prop3: string = "Something";
prop4: number = 0;
constructor(properties: IMy)
{
this.assing(properties);
}
assing(o: IMy): void
{
let that = (<any>this);
for (let key in o)
{
if (o.hasOwnProperty(key))
{
let value = (<any>o)[key];
if (typeof value !== "undefined" && typeof that[key] !== "undefined")
that[key] = value;
}
}
}
}
let my1 = new MyClass({ prop1: true });
let my2 = new MyClass({ prop2: "SomeText", prop3: "Anything" });
//I set prop2 and prop3
let my3 = new MyClass({ prop4: 10 });
//I set prop4 (fourth parameter)
console.log(my1, my2, my3);