假设我有一个自定义类;
interface IMyType {
foo: string
bar?: IChild
}
现在我想可选地实例化该类型:
var myType: IMyType = null
if (something) { myType = somethingNotNull }
结果是;
TS2322:类型'null'不能分配给类型'IMyType'.
现在我可以这样写:
var myType: IMyType | null = null
这似乎工作,但现在我有我的可选声明使用"?"在类声明中,并使用"| null"在其他地方,这看起来真的很丑陋/混乱/不正确。在typescript中实现一致的可选行为的正确方法是什么?
除了我的评论,这里是一个最小的工作示例。
当一个字段为空时,它的类型将是MyType | null
。如果您想去掉null
部分,您可以检查null
或将其转换为非空类型。然而,强制转换是有风险的,因为强制转换的变量可能仍然是null
。
或者将null检查与??
内联,并指定null时的值。
interface IMyType {
foo: string,
bar?: string,
}
var somethingNotNull: IMyType = {foo: 'foo', bar: 'bar'};
var nullableMyType: IMyType | null = null;
const shouldNotBeNull = false;
if (shouldNotBeNull) {
nullableMyType = somethingNotNull;
}
var casted: IMyType = nullableMyType as IMyType; // dangerous because casted pretends to be not nullable, but still might be null if myType is null
// var notNull: IMyType = myType; // does not compile: Type 'IMyType | null' is not assignable to type 'IMyType'
if (nullableMyType !== null) {
var notNull: IMyType = nullableMyType; // does compile
}
var notNull: IMyType = nullableMyType ?? {foo: '', bar: ''}; // Specify value for the null case