面试题答案
一键面试interface MyInterface {
readonly readonlyValue: boolean;
optionalValue?: number[];
}
function myFunction(param: MyInterface) {
// 尝试修改readonlyValue会报错,因为它是只读属性
// param.readonlyValue = false;
// 上述代码会报错,错误信息类似于:
// Cannot assign to'readonlyValue' because it is a read - only property.
// 访问optionalValue是可以的,需要先检查其是否存在
if (param.optionalValue) {
console.log(param.optionalValue);
}
}
解释:
- 对于只读属性
readonlyValue
,TypeScript 不允许在定义后对其进行修改,这是为了保证数据的不可变性。如果尝试修改,TypeScript 编译器会抛出错误,以防止意外的数据篡改。 - 对于可选属性
optionalValue
,在访问它之前需要先检查其是否存在,因为该属性不一定会在传入的对象中定义。如果不进行检查直接访问,在运行时可能会导致undefined
引用错误。
正确处理方式:
- 不要尝试修改
readonlyValue
。如果确实需要修改该值的逻辑,应该重新设计数据结构,例如将其变为普通属性或者通过某种可变更的代理机制来处理。 - 对于
optionalValue
,在使用前通过if
语句检查其是否存在,确保代码在运行时不会因为访问undefined
而报错。