首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript:类型'Ivalue[T]‘不能用于索引类型'{ '1':数字;'2':数字;'3':数字;}’

Typescript:类型'Ivalue[T]‘不能用于索引类型'{ '1':数字;'2':数字;'3':数字;}’
EN

Stack Overflow用户
提问于 2020-01-17 12:16:51
回答 1查看 39关注 0票数 0

我在typescript Playground中有一个演示

代码语言:javascript
复制
const C = {
    METHOD: {
        '1': 2,
        '2': 2,
        '3': 3
    },
    CCSIGNFLAG: {
        '4': 4,
        '5': 5,
        '6': 6
    }
};
interface IKey {
    method: '123123123';
    ccSignFlag: '2222';
    [key: string]: string;
}
interface Ivalue {
    method: '1' | '2' | '3';
    ccSignFlag: '4' | '5' | '6';
    [key: string]: string;
}

function test<T extends keyof IKey>(field: T, value: Ivalue[T]) {
    switch (field) {
        case 'method':
            return C['METHOD'][value];
    }
}
test('ccSignFlag', '4');

显示错误:Type 'Ivalue[T]' cannot be used to index type '{ '1': number; '2': number; '3': number; }'

我希望第一个参数约束第二个参数的输入

我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2020-01-20 22:49:06

我找到了a solution,但我不认为这是最好的解决方案,还有其他方法吗?

代码语言:javascript
复制
const C = {
    METHOD: {
        '1': 2,
        '2': 2,
        '3': 3
    },
    CCSIGNFLAG: {
        '4': 4,
        '5': 5,
        '6': 6
    }
};
interface IKey {
    method: '123123123';
    ccSignFlag: '2222';
    [key: string]: string;
}
interface Ivalue {
    method: '1' | '2' | '3';
    ccSignFlag: '4' | '5' | '6';
    [key: string]: string;
}

function test<T extends keyof IKey>(field: T, value: Ivalue[T]) {
    switch (field) {
        case 'method':
            //                       ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
            return C['METHOD'][value as keyof typeof C['METHOD']];
         case 'ccSignFlag':
            //                           ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
            return C['CCSIGNFLAG'][value as keyof typeof C['CCSIGNFLAG']]
        default:
            return value;
    }
}
test('ccSignFlag', '4');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59781115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档