არსებობს განსხვავება სიტყვასიტყვით 'typeof' შორის Javascript-ში და Typescript-ში?


თქვენთინი ვთქვათ მაქვს ეს მაგალითი.

const Bob = 'Bobby';

interface IName {
    text: typeof Bob;
}

let newName: IName = {
    text: 'Bobby'
}

სადაც ვაპრიბვებ ვარიაბლს 'newName', თუ ვცდილობ ტექსტი 'Bobby' სხვანაირად შევიცვალო, მაძლევს შეცდომას, თუმცა ახალი ტექსტი მაინც არის სტრინგის ტიპი.

თუ გავაკეთებ console.log(typeof Bob), ის გამოაქვს 'string', ასე რომ ინტერფეისში გასაღები 'text' უნდა იყოს 'string' ტიპის, ხომ ასეა?

მაშინ რატომ აფერხებს TypeScript მხოლოდ ტექსტი 'Bobby'-ზე ჩემს არჩევანს, როცა ვადგენ 'text'-ის მნიშვნელობას 'newName'-ში?

უპასუხე #1

რადგან Bob არის const, TypeScript იცის, რომ ის ყოველთვის შეინახავს მნიშვნელობას 'Bobby', ამიტომ იგი ზუსტად განსაზღვრავს ტიპს string-დან ობიექტის ლიტერალურ ტიპამდე 'Bobby'. ეს შემდეგ გავრცელდება ინტერფეისზე თქვენს newName ინსტანციაში. თუ გაქვთ რედაქტორი TS-ის მხარდაჭერით, შეგიძლიათ აჭერთ კურსორს IName.text და იხილავთ:

(property) IName.text: "Bobby"

JS არაფერს აკეთებს ტიპების ანოტაციების შესახებ, ამიტომ მიიღებ რანთაიმის ტიპს, რომელიც მაინც არის string.