Есть ли способ включить strictNullChecks только для небиблиотечного кода?

Я включил strictNullChecks для своего приложения TypeScript. Я использую RxJS 5, написанный на TypeScript. Однако он не включил strictNullChecks.

Следовательно, когда я делаю следующее:

Observable.fromEvent(document.getElementById('button'), 'click')

Я получаю следующую ошибку:

Error TS2345: Argument of type 'HTMLElement | null' is not assignable to parameter of type 'EventTargetLike'.
Type 'null' is not assignable to type 'EventTargetLike'.

Другими словами, когда RxJS говорит первый аргумент должен быть EventTargetLike, что на самом деле означает, что он должен быть примерно EventTargetLike | null - что и есть при использовании их конфигурации TypeScript.

Есть ли способ заставить TypeScript использовать конфигурацию библиотеки, когда она доступна (т.е. без отключения проверки типов, как описано в этот вопрос, который не работает для библиотек, отличных от стандартных).


person Vincent    schedule 02.12.2016    source источник


Ответы (1)


на самом деле это означает, что это должно быть примерно EventTargetLike | нулевой

Возможно нет. На самом деле ему нужна цель, и вы не должны передавать что-то, что может быть нулевым. Быстрая починка :

let btn = document.getElementById('button');
Observable.fromEvent(btn!, 'click');

Где вы сообщаете компилятору с помощью !, что я знаю, что btn не равно null. В качестве альтернативы вы можете сделать проверку, чтобы сделать компилятор счастливым:

let btn = document.getElementById('button');
if (btn != null){
  Observable.fromEvent(btn, 'click');
}
person basarat    schedule 03.12.2016
comment
На самом деле он проверяет, является ли цель чем-то неожиданным, например нулевым: github.com/ReactiveX/rxjs/blob/master/src/observable/ Тем не менее, я думаю, вы правы в том, что я, вероятно, уже хочу сделать эту проверку самостоятельно и справиться с этим изящным способом. Так что спасибо за подсказки как это сделать :) - person Vincent; 03.12.2016