Typescript:对于相同的类型,忽略等于空的

Typescript:对于相同的类型,忽略等于空的,typescript,generics,Typescript,Generics,我在尝试实现以下行为的泛型类型时遇到了困难: 如果目标类型比源类型宽,则结果类型包含源中未显示的目标类型的所有属性 若目标类型和源类型具有相同的属性,那个么结果应该是空的(只允许空对象) 上述第一个条件似乎很容易实现,如: //S-表示源类型 //T-代表可以更宽的目标类型 类型DiffType=省略; 但它不满足第二个条件,假设: type A={A:string;} 类型A1={a:string;} 类型AB={a:string;b:string;} //工作如期进行 常数x:DiffTy

我在尝试实现以下行为的泛型类型时遇到了困难:

  • 如果目标类型比源类型宽,则结果类型包含源中未显示的目标类型的所有属性

  • 若目标类型和源类型具有相同的属性,那个么结果应该是空的(只允许空对象)

  • 上述第一个条件似乎很容易实现,如:

    //S-表示源类型
    //T-代表可以更宽的目标类型
    类型DiffType=省略;
    
    但它不满足第二个条件,假设:

    type A={A:string;}
    类型A1={a:string;}
    类型AB={a:string;b:string;}
    //工作如期进行
    常数x:DiffType={
    b:‘b’
    }
    //不幸的是,它没有抛出错误
    常数x1:DiffType={
    福:“酒吧”
    }
    //但是应该只允许(期望的行为)
    常量x2:DiffType={}
    
    我试着做一些类似的事情,但也没用:

    type DiffType={}扩展忽略?{}:省略;
    

    有人能建议如何实施这种行为吗?我希望这是可能的:)最后!不幸的是,只有当你找到了答案时,这才显得相当容易(

    type DiffType={}扩展忽略
    ?{[K:string]:从不}
    :省略;
    

    有必要通过
    [K:string]:never来拒绝在对象中手动添加任何键。不要低估“never”的威力!

    最后!不幸的是,只有在找到答案后,这似乎才很容易(

    type DiffType={}扩展忽略
    ?{[K:string]:从不}
    :省略;
    
    有必要通过
    [K:string]:never来拒绝在对象中手动添加任何键。不要低估“never”的威力