具有共享属性的 Typescript 交集

Alk*_*Alk 5 types intersection typescript typescript-generics

我正在尝试更好地理解 Typescript 接口。

我定义了以下接口:

interface Bob<T> { 
  x : number; 
  y : string;
  z? : T;
}

interface Jennie<T> { 
  x : number; 
  y : number;
  q : number;
  z? : T;
}
Run Code Online (Sandbox Code Playgroud)

接下来我创建了这个变量:

let myIntersection : Bob<string> & Jennie<number> = {
  x: 20, y: 'hi', q: 30, z: 20
}
    
console.log(myIntersection);
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

  solution.ts:3:3
3   y : string;
    ~
The expected type comes from property 'y' which is declared here on type 'Bob<string> & Jennie<number>'solution.ts:49:24 - error TS2322: Type 'number' is not assignable to type 'never'.
Run Code Online (Sandbox Code Playgroud)

我理解原则上的想法是,&将结合两者的属性Bob并创建一种新类型,Jennie因此如果Bob具有属性xy并且Jennie具有属性ab-Bob & Jennie将具有x,,,,-但是在更复杂的情况下,如上面我们有:yab

  1. Bob和中定义了相同的属性,Jennie但类型不同 ( y)
  2. in和inz的可选属性stringBobnumberJennie

在这种情况下是否遵循一些一般规则,或者我的代码无效?