gpt4 book ai didi

typescript - 字符串或数字字典类型参数

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:10 26 4
gpt4 key购买 nike

我有这个功能:

interface NumDict<T> {
[key : number] : T
}

export function mapNumDictValues<T,R>(dict: NumDict<T>, f: (v: T, key?: number) => R): NumDict<R> {
let emptyDict : NumDict<R> = {};
return Object.keys(dict).reduce((acc, key) => {
const keyInt = parseInt(key);
acc[keyInt] = f(dict[keyInt], keyInt);
return acc;
}, emptyDict);
}

现在我希望它适用于字符串索引词典以及数字索引词典,例如像这样的东西:

function mapDictValues<K extends string|number,T,R>(obj: {[id: K]: T}, f: (v: T, key?: K) => R): {[id: K]: R} {

但是,这让我出现了这个错误:

error TS1023: An index signature parameter type must be 'string' or 'number'.

有办法吗?

最佳答案

试试这个:

interface IStringToNumberDictionary {
[index: string]: number;
}


interface INumberToStringDictionary {
[index: number]: string;
}

type IDictionary = IStringToNumberDictionary | INumberToStringDictionary;

例子:

let dict: IDictionary = Object.assign({ 0: 'first' }, { 'first': 0 });
let numberValue = dict["first"]; // 0
let stringValue = dict[0]; // first

在你的情况下是这样的:

interface IStringKeyDictionary<T> {
[index: string]: T;
}


interface INumberKeyDictionary<T> {
[index: number]: T;
}

type IDictionary<T> = IStringKeyDictionary<T> | INumberKeyDictionary<T>;

关于typescript - 字符串或数字字典类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37722161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com