带索引的打字稿对象键
Typescript object key with index
我想用这样的索引声明键
interface myType {
delivery_name1: string;
delivery_name2: string;
delivery_name3: string;
delivery_name4: string;
delivery_name5: string;
...n(20)
}
我试过了
type Index ="1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ...
type delivery_name = `delivery_name${Index}`
interface myType {
[key: delivery_name]:string;
}
但是出错了。
An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead
如何解决?
在这种情况下,您不能使用 interface
作为类型。请改用 type
:
type Index ="1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
type delivery_name = `delivery_name${Index}`
type myType = {
[key in delivery_name]: string;
}
Reference
添加到 Edwins 优秀答案,如果你想这样做 n 次...
type MakeSeries<T extends number,R extends unknown[] = []> = T extends R['length']
? never
: [...R,unknown]['length'] | MakeSeries<T, [...R, unknown]>
type Index = MakeSeries<20> // <-- n times
type delivery_name = `delivery_name${Index}`
type myType = {
[key in delivery_name]: string;
}
//**
type myType = {
delivery_name1: string;
delivery_name2: string;
delivery_name3: string;
delivery_name4: string;
delivery_name5: string;
delivery_name6: string;
delivery_name7: string;
... 12 more ...;
delivery_name20: string;
**//
}
我想用这样的索引声明键
interface myType {
delivery_name1: string;
delivery_name2: string;
delivery_name3: string;
delivery_name4: string;
delivery_name5: string;
...n(20)
}
我试过了
type Index ="1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ...
type delivery_name = `delivery_name${Index}`
interface myType {
[key: delivery_name]:string;
}
但是出错了。
An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead
如何解决?
在这种情况下,您不能使用 interface
作为类型。请改用 type
:
type Index ="1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
type delivery_name = `delivery_name${Index}`
type myType = {
[key in delivery_name]: string;
}
Reference
添加到 Edwins 优秀答案,如果你想这样做 n 次...
type MakeSeries<T extends number,R extends unknown[] = []> = T extends R['length']
? never
: [...R,unknown]['length'] | MakeSeries<T, [...R, unknown]>
type Index = MakeSeries<20> // <-- n times
type delivery_name = `delivery_name${Index}`
type myType = {
[key in delivery_name]: string;
}
//**
type myType = {
delivery_name1: string;
delivery_name2: string;
delivery_name3: string;
delivery_name4: string;
delivery_name5: string;
delivery_name6: string;
delivery_name7: string;
... 12 more ...;
delivery_name20: string;
**//
}