ਜੇਕਰ ਤੁਸੀਂ ਕਦੇ ਵੀ ਕਿਸੇ TypeScript ਮੋਨੋਰੇਪੋ (monorepo) ਵਿੱਚ ਦੋ-ਲਾਈਨਾਂ ਵਾਲਾ ਬੱਗਫਿਕਸ (bugfix) ਪੁਸ਼ ਕੀਤਾ ਹੈ ਅਤੇ ਆਪਣੀ ਬਿਲਡ ਪਾਈਪਲਾਈਨ ਨੂੰ ਦਸ ਮਿੰਟਾਂ ਦੀ ਟਾਈਪ ਚੈਕਿੰਗ ਵਿੱਚ ਫਸੇ ਦੇਖਿਆ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਸਮੱਸਿਆ ਨੂੰ ਸਮਝਦੇ ਹੋ। ਦੇਰੀ ਬੰਡਲਿੰਗ (bundling) ਕਾਰਨ ਨਹੀਂ ਹੈ। ਇਹ ਮਿਨੀਫਿਕੇਸ਼ਨ (minification) ਵੀ ਨਹੀਂ ਹੈ। ਇਹ ਉਹ ਪਲ ਹੈ ਜਦੋਂ TypeScript ਤੁਹਾਡੀਆਂ ਡਿਕਲੇਰੇਸ਼ਨ ਫਾਈਲਾਂ (declaration files) ਲਿਖਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ। ਇੱਕ ਵੀ .d.ts ਫਾਈਲ ਜਾਰੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਕੰਪਾਈਲਰ ਨੂੰ ਪੂਰੇ ਟਾਈਪ ਗ੍ਰਾਫ ਨੂੰ ਹੱਲ ਕਰਨਾ ਪੈਂਦਾ ਹੈ। ਇਹ ਇੰਪੋਰਟਸ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ, ਜੈਨਰਿਕਸ (generics) ਦਾ ਮੁਲਾਂਕਣ ਕਰਦਾ ਹੈ, ਅਤੇ ਉਹਨਾਂ ਰਿਟਰਨ ਟਾਈਪਸ ਦਾ ਅਨੁਮਾਨ (infer) ਲਗਾਉਂਦਾ ਹੈ ਜੋ ਸ਼ਾਇਦ ਤਿੰਨ ਡਿਪੈਂਡੈਂਸੀ ਲੇਅਰਾਂ ਡੂੰਘੇ ਹੋ ਸਕਦੇ ਹਨ। ਉਹ ਇੱਕ ਫਾਈਲ ਜਿਸਨੂੰ ਤੁਸੀਂ ਬਦਲਿਆ ਹੈ, ਦੂਜੀ ਫਾਈਲ ਨੂੰ ਛੂਹਦੀ ਹੈ, ਜੋ ਤੀਜੀ ਨੂੰ ਛੂਹਦੀ ਹੈ, ਅਤੇ ਅਚਾਨਕ ਕੰਪਾਈਲਰ ਸਿਰਫ਼ ਇਹ ਦੱਸਣ ਲਈ ਕਿ ਤੁਹਾਡਾ ਫੰਕਸ਼ਨ ਕੀ ਰਿਟਰਨ ਕਰਦਾ ਹੈ, ਪੂਰੀ ਰੇਪੋਜ਼ੀਟਰੀ ਵਿੱਚ ਜਾਂਚ-ਪੜਤਾਲ ਕਰਨ ਲੱਗ ਪੈਂਦਾ ਹੈ।

TypeScript 6.0 ਇਸ ਆਦਤ ਨੂੰ ਤੋੜਨ ਲਈ isolatedDeclarations ਪੇਸ਼ ਕਰਦਾ ਹੈ।

ਅਸਲੀ ਰੁਕਾਵਟ

ਡਿਕਲੇਰੇਸ਼ਨ ਫਾਈਲਾਂ ਤੁਹਾਡੇ ਕੋਡ ਦਾ ਪਬਲਿਕ ਕੰਟਰੈਕਟ ਹੁੰਦੀਆਂ ਹਨ। ਜਦੋਂ ਕੋਈ ਹੋਰ ਡਿਵੈਲਪਰ ਤੁਹਾਡਾ ਪੈਕੇਜ ਇੰਪੋਰਟ ਕਰਦਾ ਹੈ, ਤਾਂ TypeScript ਸੋਰਸ ਦੀ ਬਜਾਏ .d.ts ਫਾਈਲਾਂ ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ। ਉਹਨਾਂ ਫਾਈਲਾਂ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਤਿਆਰ ਕਰਨ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੰਪਾਈਲਰ ਟਾਈਪ ਚੈਕਰ ਨੂੰ ਸਕਿਪ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਆਊਟਪੁੱਟ ਦੀ ਇੱਕ ਲਾਈਨ ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ, ਇਸਨੂੰ ਹਰ ਸ਼ੇਪ (shape), ਹਰ ਯੂਨੀਅਨ (union), ਅਤੇ ਹਰ ਇਨਫਰਡ ਰਿਟਰਨ ਟਾਈਪ (inferred return type) ਬਾਰੇ ਪਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।

ਪੰਜਾਹ ਫਾਈਲਾਂ ਵਾਲੇ ਇੱਕ ਛੋਟੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ, ਇਹ ਤੁਰੰਤ ਹੁੰਦਾ ਹੈ। ਹਜ਼ਾਰਾਂ ਮੋਡਿਊਲਾਂ ਵਾਲੇ ਇੱਕ ਵੱਡੇ ਮੋਨੋਰੇਪੋ ਵਿੱਚ, ਇਹ ਇੱਕ ਲਗਾਤਾਰ ਚੱਲਣ ਵਾਲਾ ਦੁਸ਼ਵਿਸ਼ਾਸ (nightmare) ਬਣ ਜਾਂਦਾ ਹੈ। ਕਿਸੇ ਕੋਰ ਪੈਕੇਜ ਵਿੱਚ ਇੱਕ ਯੂਟੀਲਿਟੀ ਟਾਈਪ ਬਦਲੋ, ਅਤੇ ਕੰਪਾਈਲਰ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਹਰ ਕੰਜ਼ਿਊਮਰ (consumer) ਨੂੰ ਦੁਬਾਰਾ ਚੈੱਕ ਕਰਦਾ ਹੈ ਕਿ ਇਨਫਰਡ ਟਾਈਪਸ ਅਜੇ ਵੀ ਸਹੀ ਹਨ ਜਾਂ ਨਹੀਂ। ਬਿਲਡ ਦਾ ਸਮਾਂ ਸਿਰਫ਼ ਫਾਈਲਾਂ ਦੀ ਗਿਣਤੀ ਨਾਲ ਨਹੀਂ, ਸਗੋਂ ਡਿਪੈਂਡੈਂਸੀ ਦੀ ਡੂੰਘਾਈ (dependency depth) ਦੇ ਨਾਲ ਵਧਦਾ ਹੈ। ਇੱਕ ਮਾਮੂਲੀ ਰੀਫੈਕਟਰ (refactor) ਵੀ ਪੂਰੇ ਗ੍ਰਾਫ ਦੀ ਮੁੜ-ਗਣਨਾ (recomputation) ਸ਼ੁਰੂ ਕਰ ਸਕਦਾ ਹੈ। ਟੀਮਾਂ ਅਕਸਰ ਇਸਨੂੰ ਅਟੱਲ ਮੰਨ ਲੈਂਦੀਆਂ ਹਨ। ਪਰ ਇਹ ਅਜਿਹਾ ਨਹੀਂ ਹੈ।

isolatedDeclarations ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ

ਨਵਾਂ ਫਲੈਗ ਤੁਹਾਡੇ ਅਤੇ ਕੰਪਾਈਲਰ ਵਿਚਕਾਰਲੇ ਕੰਟਰੈਕਟ ਨੂੰ ਬਦਲ ਦਿੰਦਾ ਹੈ। TypeScript ਨੂੰ ਤੁਹਾਡੇ ਐਕਸਪੋਰਟਸ (exports) ਦੇ ਟਾਈਪਸ ਇਨਫਰ ਕਰਨ ਲਈ ਕਹਿਣ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਖੁਦ ਉਹਨਾਂ ਨੂੰ ਐਨੋਟੇਟ (annotate) ਕਰਦੇ ਹੋ। ਇਹ ਇੱਕ ਬਦਲਾਅ ਗਲੋਬਲ ਜਾਣਕਾਰੀ ਦੀ ਲੋੜ ਨੂੰ ਖਤਮ ਕਰ ਦਿੰਦਾ ਹੈ। ਕੰਪਾਈਲਰ ਨੂੰ ਹੁਣ ਆਪਣੇ ਮੋਡਿਊਲ ਲਈ ਡਿਕਲੇਰੇਸ਼ਨ ਜਾਰੀ ਕਰਨ ਲਈ ਤੁਹਾਡੀਆਂ ਡਿਪੈਂਡੈਂਸੀਆਂ ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਇਹ ਸਿਰਫ਼ ਆਪਣੇ ਸਾਹਮਣੇ ਮੌਜੂਦ ਸਿੰਟੈਕਸ (syntax) ਨੂੰ ਦੇਖਦਾ ਹੈ।

ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਹਰੇਕ ਫਾਈਲ ਆਪਣਾ .d.ts ਆਊਟਪੁੱਟ ਸੁਤੰਤਰ ਤੌਰ 'ਤੇ, ਸਮਾਂਤਰ (in parallel) ਜਾਰੀ ਕਰ ਸਕਦੀ ਹੈ। ਡਿਕਲੇਰੇਸ਼ਨ ਜਨਰੇਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਬਿਲਡ ਟੂਲ ਨੂੰ ਪੂਰਾ ਟਾਈਪ ਗ੍ਰਾਫ ਬਣਾਉਣ