作者回复: 感谢支持!
作者回复: 很高兴你能有收获,我在和大家的讨论中也在一起进步。
作者回复: 首先,代码里允许 obj 为{}其实就已经与接口定义相矛盾了,这里 TS 帮我们回避了 Cannot read property 'name' of undefined 的报错风险。 可以有两种方案,供参考: 1)可将 name 声明为可选: name?: string 但这可能不是最佳方案,如果 obj 加了其他属性就难以维护 2)利用 in 类型保护 const A = ({obj}: IProps) => { let name: any return name in obj ? obj.name : null } 代码里就要体现出来对边界情况的处理
作者回复: react-native-ui-kitten
作者回复: 你是指RN中的Animated吧?有段时间没有使用过了,查了一下,声明文件还不支持,社区有一些此问题的讨论,希望能帮到你: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/12202
作者回复: 哈哈 好巧
作者回复: 拼写错误,是cellPadding、cellSpacing
作者回复: 建议用webpack打包,声明文件可以通过declaration 选项生成,但最好还是在人工检查一下。
作者回复: 可以把FormItem用高阶组件包装一下,增加一个item属性,给ModifyForm使用,type属性也不需要了。比如: const FormItem = () => <input /> interface Item { value: string } function attachItem<P>(WrappedComponent: React.ComponentType<P>) { return class extends Component<P & Item> { render() { const { value, ...props } = this.props; return value ? <input value ={value} /> : <WrappedComponent { ...props as P } />; } } } const FormItemWrapped = attachItem(FormItem); class AddForm extends Component { render() { return <FormItem /> } } class ModifyForm extends Component { render() { return <FormItemWrapped value='xxx' /> } }
作者回复: ts-base这个工程包含很多节课的代码,报错都是变量重名问题。先只保留index.ts,要测试哪段代码就单独引入吧。