我有一个这样的界面
export interface IAppSection {
key: string;
order: number;
header: string;
content: string;
modifiedAt: string;
modifiedByEmployeeId: number;
change: 'added' | 'removed' | 'updated' | 'none';
}
我想做的是当这个接口所涉及的对象被存储时,将更改
默认为no
。
我尝试了change:'added'|'removed'|'updated'|'none'='none'
,但这不起作用。
我确信我在这里做错了什么,并且非常感谢关于我如何实现这一点的一些反馈。
另一种处理方法是根据需要标记所有IAppSection值,然后使用factory方法创建IAppSection对象。在factory方法中,您可以确保满足所有不变量,并为每个实例的可选参数指定默认值
const createAppSection = (
key: string,
order: number,
header: string,
content: string,
modifiedAt: string,
modifiedByEmployeeId: number,
change?: 'added' | 'removed' | 'updated' | 'none';
) : IAppSection => {
// perform invariants validations
if(!key){
throw Error('key required');
}
return {
key, order, content, modifiedAt, modifiedByEmployeeId,
change: change || 'none'
}
}
不能在接口中设置默认值,只能在实现中设置。
但默认情况下,它们是未定义的,这通常很好。
对于“真正的”实现,字符串联合看起来不错。
另请参阅:打字稿接口默认值
你不能用接口做到这一点。接口在运行时完全擦除,不能影响运行时行为;这是设计的。您可以创建一个类,并将默认值分配给字段,或者您可以创建一个函数来分配默认值。
我们甚至可以构造一个函数来帮助我们创建具有默认值的函数:
interface IAppSection {
key: string;
order: number;
header: string;
content: string;
modifiedAt: string;
modifiedByEmployeeId: number;
change: 'added' | 'removed' | 'updated' | 'none';
}
function withDefaults<T>() {
return function <TDefaults extends Partial<T>>(defs: TDefaults) {
return function (p: Pick<T, Exclude<keyof T, keyof TDefaults>> & Partial<TDefaults>) :T {
let result: any = p;
for (let k of Object.keys(defs)) {
result[k] = result[k] || defs[k];
}
return result;
}
}
}
const appSection = withDefaults<IAppSection>()({
change: 'none'
})
我声明了一个该类型的变量,并初始化了所有属性 然后我稍后在一个init函数中为它们赋值实数 但我不喜欢在声明对象时为每个属性指定一组缺省空值,因为它们稍后将被设置为实值。我能告诉接口将我不提供的属性默认为null吗?什么会让我这么做: 而不会得到编译器错误。现在它告诉我 TS2322:类型“{}”不能分配给类型“ix”。类型“{}”中缺少属性“b”。
问题内容: 是否可以通过SQL语句确保列的默认值为空字符串而不是? 问题答案: 是-使用DEFAULT约束:
总之,是否可以有一个声明某些基属性但不限制其他属性的接口?这是我目前的情况: 我使用的是Flux模式,它定义了一个通用调度器: 然后,我用自己的有效负载类型创建一个调度程序,如下所示: 现在我有了一些动作代码,它应该分派一个带有一些附加数据的有效负载,但是< code>ActionPayload接口只允许< code>actionType。换句话说,这段代码: 给出编译错误,因为与接口不匹配。问题
本文向大家介绍C#属性的默认值,包括了C#属性的默认值的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用初始化程序(C#6)设置默认值 如果它是只读的,则可以返回如下值:
问题内容: 我不知道如何使用Typescript为我的组件设置默认属性值。 这是源代码: 当我尝试使用这样的组件时: 我收到一条错误消息,指出缺少属性。我想使用默认值。我也尝试过在组件内部使用,但是我怀疑它没有任何作用。 如何使用默认属性值?我公司使用的许多JS组件都依赖于它们,不使用它们不是一种选择。 问题答案: 带类组件的默认道具 使用是正确的。您还应该使用接口(而不是类)作为道具和状态。 更
20.1 属性默认值 Spring Boot支持的一些库使用缓存来提高性能。例如,模板引擎会缓存已编译的模板,以避免重复解析模板文件。此外,Spring MVC可以在服务静态资源时将HTTP缓存的头部添加到响应中。 虽然缓存功能对生产环境非常有益,但在开发过程中可能会产生反作用,使您无法看到程序中刚刚做出的更改。由于这个原因,spring-boot-devtools默认会禁用那些缓存选项。 缓存选