gpt4 book ai didi

Typescript为具有动态和静态键的对象创建接口(interface)

转载 作者:行者123 更新时间:2023-12-01 06:13:45 25 4
gpt4 key购买 nike

我正在尝试学习 typescript ,但在接口(interface)方面遇到了困难,我有一个要保存的对象token和一个 route在如下

const obj = {
token: 'thisismytoken',
'/path/to/somewhere': [{ ... }]
}

我在这里遇到的问题是:如何为这个对象生成接口(interface)?

我试过了:
interface iObject {
token: string;
[key: string]: { ... }[]
}

但这会产生错误:

TS2411: Property 'token' of type 'string' is not assignable to string index type '{ ... }'.



当我尝试类似的事情时也会发生同样的事情:
interface iRoute {
val1: number;
val2: string;
}

interface iObject extends iRoute {
token: string;
}

当我尝试类似的事情时:
interface iObject {
[key: string]: { ... }[] | string;
}

当我尝试将数据添加到路由变量时出现以下错误:

TS2339: Property 'push' does not exist on type 'string | { ... }[]'.
Property 'push' does not exist on type 'string'.



还有其他方法可以做到这一点吗?

最佳答案

你可以做这样的事情。您正在尝试创建字典,因此这可能会有所帮助。

有一个干净的代码

第一种方法

interface IDictionary<T> {
[key: string]: T;
}

interface iObject {
token: string;
route: IDictionary<any[]>;
}

//Use it like this
var obj: iObject = {
token: "thisismytoken",
route: {
"/path/to/somewhere": [{
pathName: 'somewhere'
}]
}
};

这是一个 working typescript playground

第二种方法 基于您上次的尝试

当我尝试类似的事情时:

interface iObject { [key: string]: { ... }[] | string; }


    interface IDictionary<T> {
[key: string]: T;
}

var obj: IDictionary<any> = {
token: "asdf123",
"path/to/somewhere": [{
data: 'something'
}]
};

TS2339: Property 'push' does not exist on type 'string | { ... }[]'. Property 'push' does not exist on type 'string'.



第三种方法

你可以像这样对你的 obj 进行类型转换
interface iObject {
[key: string]: Array<object> | string;
}

self.obj = {
token: self.tokenVal
};
self.obj[self.route] = [{ "routeName": self.routeName }];

(<Array<object>>self.obj[self.route]).push({
"zip": "123456"
});

另请参阅 Advanced Types

关于Typescript为具有动态和静态键的对象创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48421319/

25 4 0
文章推荐: java - 如何对 ArrayList 中的项目进行排序,并根据 ArrayList 中的顺序更改另一个数组中项目的位置?
文章推荐: python - 如何在 django settings.py 中更改 'login_required' 的默认重定向
文章推荐: java - Hibernate 标签逆向工程不起作用