相关疑难解决方法(0)

在TypeScript中是否存在类似于`keyof`的`valueof`?

我希望能够将对象属性分配给给定键和值作为输入的值,但仍能够确定值的类型.这有点难以解释所以这段代码应该揭示问题:

type JWT = { id: string, token: string, expire: Date };
const obj: JWT = { id: 'abc123', token: 'tk01', expire: new Date(2018, 2, 14) };

function print(key: keyof JWT) {
    switch (key) {
        case 'id':
        case 'token':
            console.log(obj[key].toUpperCase());
            break;
        case 'expire':
            console.log(obj[key].toISOString());
            break;
    }
}

function onChange(key: keyof JWT, value: any) {
    switch (key) {
        case 'id':
        case 'token':
            obj[key] = value + ' (assigned)';
            break;
        case 'expire':
            obj[key] = value;
            break;
    }
}

print('id');
print('expire');
onChange('id', 'def456'); …
Run Code Online (Sandbox Code Playgroud)

types typescript

75
推荐指数
7
解决办法
2万
查看次数

来自Typescript中对象的键和值的类型

我有两组字符串值,我希望将它们作为常量对象从一组映射到另一组。我想从该映射生成两种类型:一种用于键,一种用于值。

const KeyToVal = {
    MyKey1: 'myValue1',
    MyKey2: 'myValue2',
};
Run Code Online (Sandbox Code Playgroud)

按键很简单:

type Keys = keyof typeof KeyToVal;
Run Code Online (Sandbox Code Playgroud)

我在获取值的编译时类型时遇到麻烦。我认为也许其中一种会起作用:

type Values = typeof KeyToVal[Keys];
type Values<K> = K extends Keys ? (typeof KeyToVal)[K] : never;
type Prefix<
    K extends Keys = Keys, 
    U extends { [name: string]: K } = { [name: string]: K }
> = {[V in keyof U]: V}[K];
Run Code Online (Sandbox Code Playgroud)

所有这些只是做的Valuesstring。我还尝试调整了两个答案,以适应如何使用打字稿中的查找来推断类型化的mapValues?,但要么我改写错误,要么答案根本不适合我的情况。

typescript typescript-typings

7
推荐指数
4
解决办法
3127
查看次数

标签 统计

typescript ×2

types ×1

typescript-typings ×1