初衷
纸上得来终觉浅,绝知此事要躬行。
有些事情看过,感觉自己知道,但是要用的时候又不记得了,所以,学习不能只看,还要动手,加深印象。
本仓库的目的是记录学习的东西,边学边动手,照着学习资料手抄一下,不用全抄,记录重点内容即可。
纸上得来终觉浅,绝知此事要躬行。
有些事情看过,感觉自己知道,但是要用的时候又不记得了,所以,学习不能只看,还要动手,加深印象。
本仓库的目的是记录学习的东西,边学边动手,照着学习资料手抄一下,不用全抄,记录重点内容即可。
The simplest way to describe a function is with a function type expression.
These types are syntactically similar to arrow functions:
function (: (: string) => void) {
('Hello World')
}
function (: string) {
.()
}
()
Imagine we have a function called padLeft
.
function (: number | string, : string): string {
throw new ('Not implemented yet!')
}
string
, number
, and boolean
JavaScript has three very commonly used primitives: string
, number
, and boolean
.
number
: JavaScript does not have a special runtime value for integers, so there’s no equivalent to int or float - everything is simply number
<script setup>
当使用 <script setup>
时,defineProps()
宏函数支持从它的参数中推导类型:
<script setup lang="ts">
const props = defineProps({
foo: {
type: String,
required: true,
},
bar: Number,
})
props.foo // string
props.bar // number | undefined
</script>
Vue 本身就是用 TypeScript 编写的,所有的 Vue 官方库都自带了类型声明文件,开箱即用。
通过 create-vue 搭建的项目包含了预先配置好的 tsconfig.json。其底层配置抽象于 @vue/tsconfig 包中。
手动配置 tsconfig.json 时,请留意以下选项:
compilerOptions.isolatedModules
应当设置为 true
,因为 Vite 使用 esbuild 来转译 TypeScript,并受限于单文件转译的限制。
如果你正在使用选项式 API,需要将 compilerOptions.strict
设置为 true
(或者至少开启 compilerOptions.noImplicitThis
,它是 strict
模式的一部分),才可以获得对组件选项中 this
的类型检查。否则 this
会被认为是 any
。
如果你在构建工具中配置了路径解析别名,例如 @/\*
这个别名被默认配置在了 create-vue
项目中,你需要通过 compilerOptions.paths
选项为 TypeScript 再配置一遍。
private IDatabaseConnection createDatabaseConnection(Connection conn, String schema) {
IDatabaseConnection dbUnitConn = new DatabaseConnection(conn, schema);
DatabaseConfig config = dbUnitConn.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, "\"?\"");
config.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FILEDS, true);
String dbName = conn.getMetaData().getDatabaseProductName().toLowerCase();
if (dbName.contains("oracle")) {
// 注意这里没有使用 OracleDataTypeFactory, 而是自己的 MyOracleDataTypeFactory
config.setProperty(DatabaseConfig.PROPERTY_DATETYPE_FACTORY, new MyOracleDataTypeFactory());
} else if (dbName.contains("mysql")) {
config.setProperty(DatabaseConfig.PROPERTY_DATETYPE_FACTORY, new MySqlDataTypeFactory());
config.setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler());
}
}
JUnit 测试时,对应 Mocked 方法,我们可以返回自己想要的返回值或异常,但是有时希望验证一下,我们调用时传的参数是否正确。
此时,可以使用 ArgumentCaptor 来收集参数,进而做验证。
示例:
ArgumentCaptor<TestIn> argCaptor = ArgumentCaptor.forClass(TestIn.class);
// 调用 (注意,这里指定了类型,不指定的话有些时候不能正确执行,比如, dao.find(any()) 就不知实际该匹配哪个,可能返回 null)
testService.doMethod(any(TestIn.class)).thenReturn(1);
// 参数收集
verify(testService).doMethod(argCaptor.captor());
// 参数校验
assertEquals("0", argCaptor.getValue().getInArg());