1️⃣ ?: (Optional Property)
📌 TypeScript
type User = {
id: number
name?: string // 있어도 되고 없어도 됨
}
const u1: User = { id: 1, name: "Tom" }
const u2: User = { id: 2 } // name 생략 가능
console.log(u2.name) // undefined
👉 ?: 는 프로퍼티가 없어도 된다는 의미 (없으면 undefined)
📌 C#
public class User {
public int Id { get; set; }
public string? Name { get; set; } // null 허용
}
var u1 = new User { Id = 1, Name = "Tom" };
var u2 = new User { Id = 2 }; // Name = null
👉 C#의 string? 은 프로퍼티는 항상 존재하지만 값이 null일 수 있다는 의미
비교 요약
- TS ?: → 프로퍼티 자체가 없어도 됨 (undefined)
- C# ? → 프로퍼티는 항상 있고 값만 null 가능
2️⃣ ?. (Optional Chaining)
📌 TypeScript
const user = { profile: { name: "Tom" } }
console.log(user.profile?.name) // "Tom"
console.log(user.address?.city) // undefined (에러 안 남)
👉 객체가 없으면 undefined 반환. 안전하게 접근 가능.
📌 C#
var user = new {
Profile = new { Name = "Tom" }
};
Console.WriteLine(user?.Profile?.Name); // "Tom"
// 없는 속성 접근 시 null 반환 (예외 없음)
👉 C#의 null-conditional operator (?.) 와 동일
3️⃣ ? : (삼항 연산자, Ternary Operator)
📌 TypeScript
const age = 20
const result = age >= 18 ? "성인" : "미성년자"
console.log(result) // "성인"
📌 C#
int age = 20;
string result = age >= 18 ? "성인" : "미성년자";
Console.WriteLine(result); // "성인"
👉 삼항 연산자는 C#과 TS에서 완전히 동일한 의미로 동작