请老师帮看下问题
来源:4-12 作业题:如何封装配置文件初始数据?【 真实应用题】

红帽哥布林
2022-03-08
配置文件:configData.ts
export interface configObject {
databaseName: string;
username: string;
password: string;
host: string;
port: string;
[key: string]: any;
}
export const configData: configObject = {
databaseName: "sales",
username: "username",
password: "pwd",
host: "192.1.1.1",
port: "8888",
};
类文件:Config.ts
import { configData, configObject } from "./configData";
class Configs {
static cname: string = "配置参数";
static cself: Configs = new Configs();
public data: configObject;
constructor() {
console.log("Configs类-构造器:");
this.data = JSON.parse(JSON.stringify(configData));
const host = this.getItem("host");
console.log("host:", host);
}
public getItem(value: string) {
if (value) {
return this.data[value];
}
return undefined;
}
public setItem(name: string, value: string) {
if (name && this.data[name]) {
this.data[name] = value;
}
return this.data;
}
//重置
public rest() {
this.data = JSON.parse(JSON.stringify(configData));
}
}
Configs.cself.setItem("username", "tom");
console.log("name1:", Configs.cself.getItem("username")); //name1: tom
Configs.cself.rest();
console.log("name2:", Configs.cself.getItem("username")); //name2: username
export {};
js下可以覆盖对象,原对象地址也可以保留。 但ts不允许覆盖,用了JSON.parse(JSON.stringify(xxx)) 来解决。但不知是否有缺陷,望老师告知更好的方式
let obj = { a: 1, b: 2 };
let obj2 = obj;
obj = { ax: "aa", bx: "bb" }; //覆盖对象 JS可行,ts会报错
是不是我不应该用这样的逻辑来写?
写回答
1回答
-
在初次let obj = { a: 1, b: 2 }的时候,类型推断已经定义obj的了类型,覆盖的话在定义obj的时候就要用混合类型进行注解了,另外一般定义引用类型的变量直接覆盖的场景比较少,我定义引用类型的变量都是直接const声明。
022022-03-10
相似问题