TypeScript에서 void 및 {}를 입력하지 않는 것으로 추론할 수 없는 이유는 무엇입니까?
P粉548512637
2023-09-04 16:03:52
<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>
으아악{}
和String
都是对象类型,而string
和'1'
都是原始类型。你可以将void
속성을 추가하여 개체 유형이 교차하므로 개체 유형과 교차합니다.반대로, 기본 유형은 가능한 값 집합을 줄여서 교차합니다.
으아악그리고 기본 유형을 객체 유형과 교차함으로써 기본 유형에 새로운 속성을 추가할 수 있습니다.
으아악그러나 기본 유형은 다른 기본 유형이 될 수 없습니다. 따라서 두 개의 서로 다른 기본 유형을 교차하면
이 됩니다. 으아악never
마지막으로
void
는 원시형입니다.즉, 이는
void & { foo: number }
가 기본 유형void & { foo: number }
意味着原始类型void
也将具有属性foo
에도foo
속성이 있다는 의미입니다.그러나
void & string
은 두 가지 기본 유형이 다르기 때문에void & string
将产生never
를 생성합니다.그러나
void & String
은String
이 객체 유형이기 때문에 (new String() String
의 속성을void & String
是void
加上String
的属性,因为String
是一个对象类型(通过new String()
더한 것입니다. /code> 생성됨).그러나 이 중 어느 것도 의미가 없습니다.
정의되지 않음
이외의 항목을void
分配除了undefined
之外的任何东西,而undefined
不能有属性。所以我认为在你的代码库中void & Type
할당할 수 없으며,정의되지 않음
은 속성을 가질 수 없습니다. 그래서 저는void & Type
이 코드베이스에 존재할 이유가 없다고 생각합니다. 필요하다고 생각되면 왜 필요한지 묻고 필요하지 않도록 코드를 리팩터링해 보겠습니다.