유형 'null'은 유형 'T'에 할당할 수 없습니다.
나는 이 일반적인 방법을 가지고 있다.
class Foo {
public static bar<T>(x: T): T {
...
if(x === null)
return null; //<------- syntax error
...
}
}
... //somewhere
const x = Foo.bar<number | null>(1);
구문 오류가 발생함
TS2322: 유형 'null'은 유형 'T'에 할당할 수 없습니다.
제가 이걸 컴파일 할 수 있을 것 같아요.T
그럴 수도 있겠지요null
.
이 문제를 해결하는 적절한 방법은 무엇인가?
반환 유형을 다음과 같이 선언해야 합니다.null
또는 꺼짐strictNullChecks
tsconfig로
public static bar<T>(x: T): T | null
또는 null을 입력할 수 있습니다.as any
예.
return null as any;
버전 3.9.5 이후 TypeScript는strictNullChecks
에numbers
그리고.strings
몇 가지 예를 들면요.예를 들어, 다음 코드는 컴파일 중에 오류를 발생시킵니다.
let x: number = null;
이 에러를 회피하려면 , 다음의 2개의 옵션이 있습니다.
- 세트
strictNullChecks=false
에tsconfig.json
. - 변수 유형을 다음과 같이 선언합니다.
any
:let x: any = null;
넣을 수 있습니다.
return null!;
그것은 나에게 효과가 있었다.
여기서 null이 아닌 인수의 null 케이스를 제거하기 위해 함수 오버로드를 제안합니다.고려사항:
class Foo {
public static bar<T>(x: T): T // overload
public static bar(x: null): null // overload
public static bar<T>(x: T) {
if (x === null) {
return null;
} else
return x;
}
}
const x = Foo.bar(1 as number); // x is number, never a null
const y = Foo.bar(null); // its null
const z = Foo.bar('s' as string | null); // its string | null
따라서 구현에는 다음과 같은 유형이 있습니다.T | null
그러나 null이 아닌 타입의 과부하로 인해 반환 타입이 있습니다.T
그래서 가능성이 전혀 없어.
저도 같은 문제에 직면했고, 그것이 사실 타이프스크립트의 현재 제한에 관한 것임을 알게 되었습니다.
현재 값과 같은 값을 체크하여 T와 같은 유형 파라미터를 좁히는 방법은 없습니다.
https://stackoverflow.com/a/68898908/10694438 를 참조해 주세요.
저 같은 경우에는 다음을 해야 했습니다.
class Node<T> {
private value: T
private next: Node<T> | null
constructor(value: T, next: Node<T> | null = null) {
this.value = value
this.next = next
}
}
언급URL : https://stackoverflow.com/questions/59715119/type-null-is-not-assignable-to-type-t
'programing' 카테고리의 다른 글
스크립트를 비동기적으로 로드하다 (0) | 2023.02.27 |
---|---|
React.js에서 메타 태그를 업데이트하려면 어떻게 해야 합니까? (0) | 2023.02.27 |
AngularJS는 컨트롤러로부터의 속성 접근을 지시합니다. (0) | 2023.02.27 |
새 React 앱 생성 중 오류 발생("최신 릴리스(5.0.0)보다 늦은 'create-react-app' 4.0.3을 실행 중) (0) | 2023.02.27 |
AppRegistry.registerComponent 호출 실패 (0) | 2023.02.27 |