在使用我未使用过的 @Override
public void onFinished(File file) {
String fileName = file.getName();
System.out.println("Finished file: " + file);
video_file = file;
emitter.complete();
response.addHeader("Content-Disposition", "attachment; filename="+ fileName);
try
{
response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() +"\""));
response.setContentLength((int)file.length());
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
catch (IOException ex) {
ex.printStackTrace();
}
}
的早期版本时
ngrx
和createAction()
,如果我尝试添加不属于提供的createReducer()
的任何其他属性,则会抛出错误。
我将应用程序升级到State
,并且也使用了Angular 8
。现在,即使ngrx 8.3.0
文档指出将实现大多数类型推断,似乎类型安全性已不复存在。
NGRX
someState.ts
export interface ISampleState {
id: number
}
someAction.ts
export const request = createAction('[SAMPLE] Request', props<{id: number}>();
someReducer.ts
在实际运行代码之后,我将通过const initialState: ISampleState = {
id: null
}
const sampleReducer = createReducer(
initialState,
on(SampleActions.request, (state, { id }) => {
return {
...state,
id,
// Below would previously complain since only `id` is defined in the `ISampleState`
thisShouldNormallyComplain: 'but it does not'
}
}
);
// AOT purposes
export function reducer(state: ISampleState | undefined, action: Action): ISampleState {
return sampleReducer(state, action);
}
看到商店确实填充了此不必要的属性。
我最大的担心是,当我在DevTools
块内的减速器中遇到错字时,它也不会抱怨。
即如果我不小心输入
return
很难找到错误,因为它可以很好地编译而不会产生投诉。
有什么想法吗?
答案 0 :(得分:3)
已经玩了一点,看来这是TypeScript的问题! createReducer
最终创建一个签名为ActionReducer<S, A>
的{{1}}。
在这种情况下,即使返回的类型比(state: S | undefined, action: A) => S
具有更多的属性,TypeScript似乎也允许满足该签名的任何可调用函数满足该参数。我向编译器提出了this bug,因为在我看来这不是正确的行为。