Javascript 将动态api响应分配给typescript接口
我不熟悉typscript和nodejs。我试图分配一个响应,从restful api调用获取它到typescript接口。我不想使用Object.keys或Obejct.values来获取所需的数据,但尝试使用typescirpt接口 以下是回应Javascript 将动态api响应分配给typescript接口,javascript,typescript,Javascript,Typescript,我不熟悉typscript和nodejs。我试图分配一个响应,从restful api调用获取它到typescript接口。我不想使用Object.keys或Obejct.values来获取所需的数据,但尝试使用typescirpt接口 以下是回应 // this is dynamic in nature { return: [{ 'domain1.com': true, 'domaim2.com': true, 'domain3.com': tr
// this is dynamic in nature
{
return: [{
'domain1.com': true,
'domaim2.com': true,
'domain3.com': true
}]
}
域名键值不限于3,可能是n。上面的响应甚至不是json,但这就是我从响应中得到的
我正在使用以下ts接口分配响应
export interface ResponseString {
Res: string;
}
export interface ServerRes {
return: ResponseString[];
}
try {
data = await getServerResponse();
}
catch (e) {
console.error(e);
throw new Error("Exception: failure ..");
}
try {
const Servers: string[] = Object.keys(data.return[0]); // I want to use tyscrpit interface instread of object.keys to get the domains
for (const server of Servers) {
// to be done
}
catch(e) {
console.error(e);
}
请分享您对如何实现这一目标的意见
[更新]
我还收到了其他API响应,如下所示
{ return: [
{ 'domainroot.com':'domain1.com' : ['some valu, 'some other value'] }
]}
这些响应也是动态的,但只有键值发生了变化,但对象并没有发生变化
{ ret: [ {'df':'df' : [ 'df', 'dfd']}]}
谢谢,您需要定义一个带有签名的接口
字符串:boolean
const data = {
"retval": [{
"domain1.com": true,
"domaim2.com": false,
"domain3.com": true
}]
};
interface ServerStatusList {
[key: string]: boolean;
}
const servers: ServerStatusList = data.retval[0];
for (let server in servers) {
console.log(`server ${server} : ${servers[server]}`);
}
您需要定义一个带有签名的接口
string:boolean
const data = {
"retval": [{
"domain1.com": true,
"domaim2.com": false,
"domain3.com": true
}]
};
interface ServerStatusList {
[key: string]: boolean;
}
const servers: ServerStatusList = data.retval[0];
for (let server in servers) {
console.log(`server ${server} : ${servers[server]}`);
}
这是类型定义
interface ServerResponse {
['return']: { [k: string]: boolean }[]
};
let r: ServerResponse = { 'return':[ { 'domain1.com': true,'domaim2.com': true,'domain3.com': true } ] }
无论如何,您必须使用Objects.keys枚举服务器这是类型定义
interface ServerResponse {
['return']: { [k: string]: boolean }[]
};
let r: ServerResponse = { 'return':[ { 'domain1.com': true,'domaim2.com': true,'domain3.com': true } ] }
无论如何,您必须使用Objects.key枚举服务器。除了实际“返回”之外,使用其他东西不是一个好主意。好的,改为retval,但我不确定如何将{'key':true,'key2',true…}映射到接口。为什么不使用Object.keys?这是枚举Objective动态键的标准方法,我正试图通过在任何地方使用接口来构造它。。除了实际“返回”之外,使用其他东西不是一个好主意。好的,改为retval,但我不确定如何将{'key':true,'key2',true…}映射到接口。为什么不使用Object.keys?这是枚举Objective动态键的标准方法。我正在尝试通过在任何地方使用接口来构造它。感谢您的回答,我将尝试此方法。您是对的,在某些地方我们需要使用Object.keys或Object.Values。上述代码与要求不符,但我理解我们必须使用Object,动态响应的键或Object.Value,目前无法将其指定给接口。所以接受这个答案。谢谢你的回答,我会尝试一下。你是对的,在某些地方我们需要使用Object.keys或Object.values。上面的代码不能很好地满足要求,但我知道我们必须使用Object、keys或Object.values来进行动态响应,而目前还不能将其分配给接口。所以接受这个答案。谢谢你的回答,我会尝试一下。我在typescript中遇到编译问题,其他代码也会得到响应,这些都是动态的,与上面的示例略有不同。在这种情况下,我选择/强制使用Obejct.keys或Object.values,我在代码中使用的所有内容都是类型化的。在上面的示例中,数据没有被键入,我想这就是为什么我在尝试移植此示例代码时出错的原因。如果您的问题中没有正确的代码,我们就看不出可能有什么错误。您的代码更新没有任何意义<代码>{'df':'df':['df','dfd']}不是有效的javascript对象或JSONYes它不是有效的json或javascript对象。即使第一个例子也不是一个有效的回答。有人从stackoverflow中查看并更正了它。感谢您的回答,我将尝试一下。我在typescript中遇到编译问题,其他代码也得到响应,这些也是动态的,与上面的示例略有不同。在这种情况下,我选择/强制使用Obejct.keys或Object.values,我在代码中使用的所有内容都是类型化的。在上面的示例中,数据没有被键入,我想这就是为什么我在尝试移植此示例代码时出错的原因。如果您的问题中没有正确的代码,我们就看不出可能有什么错误。您的代码更新没有任何意义<代码>{'df':'df':['df','dfd']}不是有效的javascript对象或JSONYes它不是有效的json或javascript对象。即使第一个例子也不是一个有效的回答。有人从stackoverflow处对其进行了审查,并对其进行了更正。