2017-03-15 3 views
1

strictNullChecks와 함께 작동하도록 모든 코드를 변환하기 시작했습니다. 함수의 입력이 string | null 내가 반환 형식이 어떻게이게 가능 string공용체 형식에서 null을 제거하는 함수 시그니처 만들기

되고 싶은 경우

function defaultValue<TUnionNull>(value: TUnionNull, default: TWithoutNull): TWithoutNUll{ 
    return value == null ? default : value 
} 

function requiresNotNullString(): void 

var name: string | null; 

var checkedName: string = defaultValue(name, "Fred"); 

즉 : 나는 다음을 수행하는 기능을 갖고 싶어? 에 대해 어떻게

답변

1

:

function defaultValue<T>(value: T | null, defaultValue: T): T { 
    return value == null ? defaultValue : value 
} 

이 ( defaultValue로 변경 default를 사용할 수 없기 때문에) (@Roaders에서 제공 example in playground)

+0

감사합니다. 그것은 내가 지금 막 생각해 냈던 것과 거의 동일합니다. 그것은 작동하지만 당신이 함수에 타입을 전달할 것을 요구합니다 :'defaultValue (value, default)'' '이 필요 없다면 좋을 것입니다. – Roaders

+1

아니요, 컴파일러는'T' 기반을 추론합니다 당신이 '가치'로 전달하는 것에. 나는 당신의 코드를 검사했고'value'가'string | '인 경우에만 –

+0

을 컴파일했습니다. null'이면 리턴 타입은'string | null' 그래서'var return : string = defaultValue ('null이 반환 될 수 있으므로 실패합니다.) – Roaders