Я сталкиваюсь с неприятностями при наборе текста:
function identity<T>(v: T): T{ return v; }
function execute(fn: {(n: number):string}) {}
execute((n) => {
// type of n is 'number'
return n.toFixed();
})
execute(identity((n) => {
// type of n is 'any'
return n.toFixed();
}))
Когда типизированная функция высшего порядка execute
получает функцию, аргументы этой анонимной функции вводятся с помощью логического вывода. Однако передача этой анонимной функции в функцию-оболочку identity
приводит к потере этих предполагаемых типов. Могу ли я внести какие-либо корректировки в конструкцию execute
или identity
, которая позволит этим выводам все еще выводиться?
ПРИМЕЧАНИЕ Для простоты identity
здесь является чистой функцией. На практике это не так, но должно иметь такую же типизацию, как эта identity
функция. См. checkpoint
в контексте вопроса для более подробной информации.
см. На игровой площадке TS
Context
Это общая форма проблемы, с которой я столкнулся при загрузке данных в контексте жизненного цикла компонента React. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Не следует вызывать setState
для компонента, который больше не монтируется, я предотвращаю срабатывание обратного вызова загрузки.
function loadData():Promise<MyDataType> {/*...*/}
// Wraps the passed function (handleDataLoaded),
// such that when the returned function is executed the
// passed function is conditionally executed depending
// on closure state.
function checkpoint(fn){/*...*/}
// Add data to the state of the component
function handleDataLoaded(val: MyDataType){/*...*/}
// react lifecycle hook componentDidMount
loadData()
.then(checkpoint(handleDataLoaded));
// react lifecycle hook componentWillUnmount
// adjusts state of checkpoint's closure such that handleDataloaded
// is not fired after componentWillUnmount