ਇੱਕ type assertion ਕੰਪਾਇਲਰ ਨੂੰ "ਮੇਰੇ ਉੱਪਰ ਭਰੋਸਾ ਕਰੋ, ਇਹ ਮੁੱਲ X ਕਿਸਮ ਦਾ ਹੈ" as ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਦੱਸਦਾ ਹੈ। ਇਹ ਕੋਈ ਰਨਟਾਈਮ ਪਰਿਵਰਤਨ ਜਾਂ ਜਾਂਚ ਨਹੀਂ ਕਰਦਾ — ਇਹ ਸਿਰਫ ਬਦਲਦਾ ਹੈ ਕਿ ਕੰਪਾਇਲਰ ਮੁੱਲ ਦਾ ਸਲੂਕ ਕਿਵੇਂ ਕਰਦਾ ਹੈ।
el = .() ;
el. = ;
data = .(str) ;
ਇੱਕ type assertion ਕੰਪਾਇਲਰ ਨੂੰ "ਮੇਰੇ ਉੱਪਰ ਭਰੋਸਾ ਕਰੋ, ਇਹ ਮੁੱਲ X ਕਿਸਮ ਦਾ ਹੈ" as ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਦੱਸਦਾ ਹੈ। ਇਹ ਕੋਈ ਰਨਟਾਈਮ ਪਰਿਵਰਤਨ ਜਾਂ ਜਾਂਚ ਨਹੀਂ ਕਰਦਾ — ਇਹ ਸਿਰਫ ਬਦਲਦਾ ਹੈ ਕਿ ਕੰਪਾਇਲਰ ਮੁੱਲ ਦਾ ਸਲੂਕ ਕਿਵੇਂ ਕਰਦਾ ਹੈ।
el = .() ;
el. = ;
data = .(str) ;
ਇੱਕ assertion ਕੰਪਾਇਲਰ ਦੇ ਨਿਰਣੇ ਨੂੰ ਓਵਰਰਾਈਡ ਕਰਦਾ ਹੈ — ਜੇ ਤੁਸੀਂ ਗਲਤ ਹੋ, ਤੁਹਾਨੂੰ ਕੋਈ ਚੇਤਾਵਨੀ ਤੋਂ ਬਿਨਾਂ ਇੱਕ runtime ਕ੍ਰੈਸ਼ ਮਿਲਦਾ ਹੈ:
const x = "hello" as unknown as number; // double assertion — compiler stops complaining
x.toFixed(2); // 💥 runtime error: x.toFixed is not a function
Asserting ਮੁੱਲ ਨੂੰ ਉਹ ਕਿਸਮ ਨਹੀਂ ਬਣਾਉਂਦਾ; ਇਹ ਸਿਰਫ ਚੈਕਰ ਨੂੰ ਚੁੱਪ ਕਰਾਉਂਦਾ ਹੈ। ਤੁਸੀਂ ਸਹੀਤਾ ਦੀ ਜਿੰਮੇਵਾਰੀ ਕੰਪਾਇਲਰ ਤੋਂ ਲੈ ਲਈ ਹੈ।
// 1. type guard — actually verify at runtime
if (typeof input === "string") { /* input is string, proven */ }
// 2. validation library (zod) for external data
const user = UserSchema.parse(data); // throws if shape is wrong
as const ਵੱਖਰਾ ਹੈconst point = { x: 1 } as const; // not a risky cast — narrows to literal/readonly
Assertions ਕਈ ਵਾਰ ਜ਼ਰੂਰੀ ਹਨ (DOM APIs, unknown ਨੂੰ ਨੁਕਸਾ ਕਰਨਾ ਜਿਸਨੂੰ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਜਾਂਚ ਚੁੱਕੇ ਹੋ), ਪਰ ਹਰ ਇੱਕ ਉਹ ਜਗ੍ਹਾ ਹੈ ਜਿੱਥੇ ਕੰਪਾਇਲਰ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਆ ਨਹੀਂ ਦੇ ਸਕਦਾ।
ਅਭਰੋਸੇਮੰਦ ਡੇਟਾ ਲਈ type guards ਜਾਂ schema validation ਨੂੰ ਤਰਜੀਹ ਦਿਓ, ਅਤੇ ਹਰ as ਨੂੰ ਇੱਕ ਛੋਟਾ, ਜਾਣਬੁੱਝ ਕੇ "ਮੈਂ ਬਿਹਤਰ ਜਾਣਦਾ ਹਾਂ" ਵਜੋਂ ਸਮਝੋ ਜੋ ਤੁਸੀਂ ਸਥਿਰ ਹੋ ਸਕੋ।