2019-05-15 আপডেট করুন (বিকল্প হিসাবে উন্নত কোড প্যাটার্ন)
ব্যবহার করার বহু বছর পরে constআরও কার্যকরী কোড এবং উপকৃত , আমি বেশিরভাগ ক্ষেত্রে নীচে ব্যবহার করার বিরুদ্ধে সুপারিশ করব। (অবজেক্ট তৈরি করার সময়, টাইপ সিস্টেমটিকে কোনও নির্দিষ্ট ধরণের পরিবর্তে টাইপ করার পরিবর্তে টাইপ সিস্টেমকে জোর করা প্রায়শই কিছু ভুল হওয়ার ইঙ্গিত দেয়)।
পরিবর্তে আমি constযতটা সম্ভব ভেরিয়েবলগুলি ব্যবহার করার পরামর্শ দেব এবং তারপরে অবজেক্টটি চূড়ান্ত পদক্ষেপ হিসাবে রচনা করব:
const id = GetId();
const hasStarted = true;
...
const hasFinished = false;
...
return {hasStarted, hasFinished, id};
- এটি সুস্পষ্ট টাইপিংয়ের কোনও প্রয়োজন ছাড়াই সবকিছু সঠিকভাবে টাইপ করবে।
- মাঠের নামগুলি পুনরায় টাইপ করার দরকার নেই।
- এটি আমার অভিজ্ঞতা থেকে সবচেয়ে পরিষ্কার কোডের দিকে নিয়ে যায়।
- এটি কম্পাইলারকে আরও রাষ্ট্রীয় যাচাইকরণ সরবরাহ করতে দেয় (উদাহরণস্বরূপ, আপনি যদি একাধিক স্থানে ফিরে যান তবে সংকলকটি একই ধরণের অবজেক্টটি সর্বদা ফিরে আসার বিষয়টি নিশ্চিত করবে - যা আপনাকে প্রতিটি অবস্থানে পুরো রিটার্ন মান ঘোষণা করতে উত্সাহ দেয় - পুরোপুরি পরিষ্কার করে যে মান অভিপ্রায়)।
সংযোজন 2020-02-26
আপনার যদি এমন কোনও ধরণের প্রয়োজন হয় যা আপনাকে অলসভাবে শুরু করা যেতে পারে: চিহ্নিত করুন এটি একটি নাল যুক্ত ইউনিয়ন (নাল বা প্রকার)। টাইপ সিস্টেমটি আপনাকে প্রথমে এর কোনও মান রয়েছে তা নিশ্চিত না করে এটি ব্যবহার করতে বাধা দেবে।
ইন tsconfig.json, আপনি কঠোর নাল চেক সক্ষম করেছেন তা নিশ্চিত করুন:
"strictNullChecks": true
তারপরে এই প্যাটার্নটি ব্যবহার করুন এবং টাইপ সিস্টেমটিকে আপনাকে দুর্ঘটনাজনক নাল / অপরিজ্ঞাত অ্যাক্সেস থেকে রক্ষা করার অনুমতি দিন:
const state = {
instance: null as null | ApiService,
// OR
// instance: undefined as undefined | ApiService,
};
const useApi = () => {
// If I try to use it here, the type system requires a safe way to access it
// Simple lazy-initialization
const api = state?.instance ?? (state.instance = new ApiService());
api.fun();
// Also here are some ways to only access it if it has value:
// The 'right' way: Typescript 3.7 required
state.instance?.fun();
// Or the old way: If you are stuck before Typescript 3.7
state.instance && state.instance.fun();
// Or the long winded way because the above just feels weird
if (state.instance) { state.instance.fun(); }
// Or the I came from C and can't check for nulls like they are booleans way
if (state.instance != null) { state.instance.fun(); }
// Or the I came from C and can't check for nulls like they are booleans
// AND I was told to always use triple === in javascript even with null checks way
if (state.instance !== null && state.instance !== undefined) { state.instance.fun(); }
};
class ApiService {
fun() {
// Do something useful here
}
}
99% ক্ষেত্রে নীচেরটি করবেন না:
আপডেট 2016-02-10 - টিএসএক্স পরিচালনা করতে (ধন্যবাদ জোশ)
asটিএসএক্সের জন্য অপারেটরটি ব্যবহার করুন ।
var obj = {
property: null as string
};
একটি দীর্ঘ উদাহরণ:
var call = {
hasStarted: null as boolean,
hasFinished: null as boolean,
id: null as number,
};
আসল উত্তর
এই সংযোগটি তৈরি করতে কাস্ট অপারেটরটি ব্যবহার করুন (পছন্দসই ধরণের নাল কাস্ট করে)।
var obj = {
property: <string> null
};
একটি দীর্ঘ উদাহরণ:
var call = {
hasStarted: <boolean> null,
hasFinished: <boolean> null,
id: <number> null,
};
এটি দুটি অংশ থাকার চেয়ে অনেক ভাল (একটি প্রকার ঘোষণা করার জন্য, দ্বিতীয়টি খেলাপি হিসাবে ঘোষণা করা):
var callVerbose: {
hasStarted: boolean;
hasFinished: boolean;
id: number;
} = {
hasStarted: null,
hasFinished: null,
id: null,
};