ค้นหาเว็บไซต์

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

บทความที่เกี่ยวข้อง