我如何声明和定义我的变量是可空的?



假设我有一个自定义类;

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

最新更新