typescript - ฉันจะประกาศและกำหนดตัวแปรของฉันให้สามารถเป็นค่า null ได้อย่างไร?
สมมติว่าฉันมีคลาสที่กำหนดเอง;
interface IMyType {
foo: string
bar?: IChild
}
ตอนนี้ฉันต้องการสร้างอินสแตนซ์ของประเภทนั้นแบบเลือกได้:
var myType: IMyType = null
if (something) { myType = somethingNotNull }
ผลลัพธ์นี้ทำให้;
TS2322: ไม่สามารถกำหนดค่า 'null' ให้กับประเภท 'IMyType' ได้
ตอนนี้ฉันสามารถทำสิ่งนี้ได้แล้ว:
var myType: IMyType | null = null
และดูเหมือนว่าวิธีนั้นใช้ได้ แต่ตอนนี้ฉันได้ประกาศตัวเลือกของฉันโดยใช้ "?" ในการประกาศคลาส และใช้ "| null" ที่อื่น ๆ ซึ่งดูไม่สวยงาม/ยุ่งเหยิง/ไม่ถูกต้อง วิธีที่ถูกต้องในการทำให้พฤติกรรมตัวเลือกสอดคล้องกันใน TypeScript คืออะไร?
คำตอบ #1
นอกจากความคิดเห็นของฉันแล้ว นี่คือตัวอย่างการทำงานที่เรียบง่าย
เมื่อฟิลด์สามารถเป็นค่า null ได้ ประเภทของมันจะเป็น MyType | null หากคุณต้องการกำจัดส่วน null คุณสามารถตรวจสอบค่า null หรือแปลงเป็นประเภทที่ไม่สามารถเป็น null ได้ อย่างไรก็ตาม การแปลงนั้นมีความเสี่ยงเพราะตัวแปรที่ถูกแปลงอาจยังคงเป็น null
หรือใส่การตรวจสอบค่า null แบบ inline ด้วย ?? และระบุค่าหากเป็น 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
