찾다

 >  Q&A  >  본문

TypeScript에서 void 및 {}를 입력하지 않는 것으로 추론할 수 없는 이유는 무엇입니까?

<p>다른 유형과의 교차 유형과 함께 TypeScript의 void 유형을 사용하면 다른 결과가 나타납니다. </p> <pre class="brush:php;toolbar:false;">type A = void & {} // A는 void & 유형 B = void & '1' // B는 절대 아닙니다. type C = void & 1 // C는 절대 아닙니다. type D = void & string // D는 절대 아닙니다. type E = void & String // E는 void </pre> <pre class="brush:php;toolbar:false;">유형 A = void & 유형 E = void </pre> <p>또한 never 유형이어야 합니다. 그렇죠? </p>
P粉548512637P粉548512637455일 전646

모든 응답(1)나는 대답할 것이다

  • P粉285587590

    P粉2855875902023-09-05 12:01:48

    {}String 都是对象类型,而 string'1' 都是原始类型。你可以将 void 속성을 추가하여 개체 유형이 교차하므로 개체 유형과 교차합니다.

    으아악

    반대로, 기본 유형은 가능한 값 집합을 줄여서 교차합니다.

    으아악

    그리고 기본 유형을 객체 유형과 교차함으로써 기본 유형에 새로운 속성을 추가할 수 있습니다.

    으아악

    그러나 기본 유형은 다른 기본 유형이 될 수 없습니다. 따라서 두 개의 서로 다른 기본 유형을 교차하면 never

    이 됩니다. 으아악

    마지막으로 void는 원시형입니다.


    즉, 이는 void & { foo: number }가 기본 유형 void & { foo: number } 意味着原始类型 void 也将具有属性 foo에도 foo 속성이 있다는 의미입니다.

    그러나 void & string은 두 가지 기본 유형이 다르기 때문에 void & string 将产生 never를 생성합니다.

    그러나 void & StringString이 객체 유형이기 때문에 ( new String() <을 통해) String의 속성을 void & Stringvoid 加上 String 的属性,因为 String 是一个对象类型(通过 new String() 더한 것입니다. /code> 생성됨).


    그러나 이 중 어느 것도 의미가 없습니다. 정의되지 않음 이외의 항목을 void 分配除了 undefined 之外的任何东西,而 undefined 不能有属性。所以我认为在你的代码库中 void & Type 할당할 수 없으며, 정의되지 않음은 속성을 가질 수 없습니다. 그래서 저는 void & Type이 코드베이스에 존재할 이유가 없다고 생각합니다. 필요하다고 생각되면 왜 필요한지 묻고 필요하지 않도록 코드를 리팩터링해 보겠습니다.

    회신하다
    0
  • 취소회신하다