Typescript:从字符串类型中通用删除类型

Typescript:从字符串类型中通用删除类型,typescript,typescript-generics,Typescript,Typescript Generics,我有一个简单的问题 type ExampleType = 'a' | 'b' | 'c'; 其使用方式如下: from(from: ExampleType) { return { to: (to: ExampleType) => { // move something from/to }, } } 我试图让“to Function”只接受不是参数“from”中传递的值的值。 我尝试使用省略和排除,但它们都不接受动态

我有一个简单的问题

type ExampleType = 'a' | 'b' | 'c';
其使用方式如下:

from(from: ExampleType) {
    return {
        to: (to: ExampleType) => {
            // move something from/to
        },
    }
}
我试图让“to Function”只接受不是参数“from”中传递的值的值。 我尝试使用省略和排除,但它们都不接受动态值

这可以用typescript实现吗

我想像这样使用它

move(something).from('a').to('b'); // .to() should only accept 'b' and 'c'

这真的很好,IDE会为此提供正确的建议吗?我相信这满足了您的要求:使用
T扩展ExampleType
然后
排除

type ExampleType='a'|'b'|'c';
常数from=(from:T)=>{
返回{
至:(至:排除)=>{
//把某物从/移到
},
}
}
从('a')。到('b');//好的
从('a')。到('c');//好的
从('a')。到('a');//打字错误

优雅的处理方式!先生,你是我今天的英雄!祝你周末愉快,非常感谢!没问题!这是一个很好的问题。起初我不确定这是否可能,所以我也学到了一些东西!当我得到这样的答案时,我意识到我有很多东西要学,比如打字本:-)
type ExampleType = 'a' | 'b' | 'c';

const from = <T extends ExampleType>(from: T) => {
    return {
        to: (to: Exclude<ExampleType, T>) => {
            // move something from/to
        },
    }
}

from('a').to('b'); // good
from('a').to('c'); // good
from('a').to('a'); // TypeError