TypeScript에서 void 및 {}를 입력하지 않는 것으로 추론할 수 없는 이유는 무엇입니까?
P粉548512637
P粉548512637 2023-09-04 16:03:52
0
1
640
<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粉548512637
P粉548512637

모든 응답(1)
P粉285587590

{}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이 코드베이스에 존재할 이유가 없다고 생각합니다. 필요하다고 생각되면 왜 필요한지 묻고 필요하지 않도록 코드를 리팩터링해 보겠습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿