您可以使用接口:
interface EndpointAuth {
login: string;
}
interface Endpoint {
auth: EndpointAuth;
}
let endpoints: Endpoint = {
auth: {
login: "http://localhost:8079/auth/login"
}
};
(在 playground 中查看代码)
您还可以使用类型代替接口:
type EndpointAuth = {
login: string;
}
type Endpoint = {
auth: EndpointAuth;
}
(
在 playground 中查看代码)
或者 "内联":
let endpoints: { auth: { login: string } } = {
auth: {
login: "http://localhost:8079/auth/login"
}
};
当然,你可以将它们组合在一起。
编辑
因为你想要答案解释为什么使用Object
不起作用:
定义一个变量类型为Object
(在大部分情况下)并不是你真正想做的,通常你的意思是any
,就像这样:
var endpoints2: any = {
auth: {
login: "http://localhost:8079/auth/login"
}
};
如果您不指定类型,它就不会失败(就像这样)。
将变量定义为Object
与将其定义为{}
相同,其为空对象,通常不是您想要的,而且仅适用于以下情况:
let o1: Object = {};
let o2: Object = Object.create(null);
然而,使用any
并不能帮助你太多,因为这样你基本上告诉编译器不必担心类型安全,它将允许你对变量做任何操作,却不告知你是否存在错误:
let o: any = { x: 3, y: 6 };
console.log(o.z.toString());
编译不会失败,但运行时会失败:
未捕获的类型错误:无法读取未定义的属性'toString'
这将在编译时失败:
let o: { x: number, y: number } = { x: 3, y: 6 };
console.log(o.z.toString());