Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate primitives Literals of playground examples into japanese #247

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// TypeScriptには、ソースコードにリテラルを用いた
// とても面白い利用例があります。

// これは、型の拡張・型の絞り込みにおいて、多くのサポートをもたらします。
// ( example:type-widening-narrowing )
// そして、はじめにそれを網羅する価値があります。

// リテラルは集合型よりも具体的なサブタイプです。
// どういうことかと言うと、型システム内部では
// 「Hello World」は文字列ですが、文字列は「Hello World」ではありません。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO

// リテラル型は集合型よりも具体的なサブタイプです。
// どういうことかと言うと、型システム内部では
// 「Hello World」型は文字列型ですが、文字列型は「Hello World」型ではありません。

ちょっと型が多くてうるさいかもしれない。ただ、型システムの話してるので、文字列型と明示的にした方がいいかなと思いました

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これも悩みどころですね。いずれも「literal type」「string type」とは原文に書かれていないため。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

基本的に、訳者の意見を尊重でいいと思います 👍


const helloWorld = "Hello World";
let hiWorld = "Hi World"; // これはletなので文字列型です

// この関数は、すべての文字列を受け入れます
declare function allowsAnyString(arg: string);
allowsAnyString(helloWorld);
allowsAnyString(hiWorld);

// この関数は、文字列リテラル「Hello World」のみを受け入れます
declare function allowsOnlyHello(arg: "Hello World");
allowsOnlyHello(helloWorld);
allowsOnlyHello(hiWorld);

// これにより、共用体型を使用して特定のリテラルのみを受け入れる
// APIを宣言することができます

declare function allowsFirstFiveNumbers(arg: 1 | 2 | 3 | 4 | 5);
allowsFirstFiveNumbers(1);
allowsFirstFiveNumbers(10);

let potentiallyAnyNumber = 3;
allowsFirstFiveNumbers(potentiallyAnyNumber);

// しかし、このルールは混み入ったオブジェクトには適用されません。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

原文的には「一見すると、このルールは複雑なオブジェクトには適用されないように見えます」みたいなas constを付けない挙動を導入として解説してから、後段で適用したかったらas const付けるとできるみたいなことを言いたいように見えるんですが、そこまで訳すか難しいところですね 👀
私は訳したくなってしまう派ですが。。。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この線引きが結構難しいですよね。直訳すると「複雑」「混み入った」となるのですが、オブジェクトであれば何だってこうなりますし。。「一見すると」も何だか変なのでとったのですが悩みどころです。


const myUser = {
name: "Sabrina"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO: Hello WorldがHello, 世界になってるPRが会った気がする

Suggested change
name: "Sabrina"
name: "太郎"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

うーん、花子じゃだめなのか、みないな話になりそうなので。。この辺どうしましょう

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

たしかに、Gender Neutralな名前でないと厳しいかもですね‥
日本語で Gender Neutral な名前ってなんだろ。
原文は大体女性の名前っぽいですが、下手に悩むよりは原文のままでも良さそうと感じます。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

良さそう

};

// 定数として定義された `name:"Sabrina"` であっても
// `name:string` に変換されてしまいます。
// こうなるのは、nameプロパティがいつでも変更できるからです。

myUser.name = "Cynthia";

// なぜならmyUserのnameプロパティは変更できるため、
// TypeScriptは型システムにおいてリテラル型を使用できません。
// しかしながら、次の機能でこれを許容することができます。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO:
「there is ~」で〜が存在する
「allow 人称代名詞 to do」で人称代名詞がto do できるようにする
みたいな訳になる気がします

Suggested change
// しかしながら、次の機能でこれを許容することができます
// しかしながら、nameプロパティをリテラル型として扱えるようにする機能があります

to do thisのthisを開いたのはちょっとやり過ぎかもしれないです

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

そうですね、これは書かれていない事なのでこのままとしたいです。


const myUnchangingUser = {
name: "Fatma"
} as const;

// 「as const」をオブジェクトに適用すると、
// 変更できるオブジェクトの代わりに、
// 変更できないオブジェクトになります。

myUnchangingUser.name = "Raîssa";

// 「as const」はコード中でインラインリテラルを扱ったり、
// 固定データを扱うための素晴らしいツールです。
// 「as const」は配列でも動作します。

const exampleUsers = [{ name: "Brian" }, { name: "Fahrooq" }] as const;